1、abstract?class和interface的區(qū)別是什么?
1)接口用于規(guī)范,抽象類用于共性。
2)抽象類是類,只能被單繼承,接口可以一次實(shí)現(xiàn)多個(gè)。
3)抽象類可以提供某些方法部分實(shí)行,接口不可以。
4)抽象類的實(shí)例是它的子類給出的,接口的實(shí)例是實(shí)現(xiàn)它的類給出的。
5)抽象類中可以有方法實(shí)現(xiàn),也可以定義非靜態(tài)的類變量,接口只能聲明方法、屬性、事件、索引器
6)在抽象類中加入一個(gè)方法,那么它的子類就同時(shí)有了這個(gè)方法,而在接口加入新的方法,那么實(shí)現(xiàn)它的類就要重新編寫(這就是說為什么說接口是一個(gè)類的規(guī)范了。)
7)接口成員被定義為公共的,但抽象類的成員也可以是私有的、受保護(hù)的、內(nèi)部的或受保護(hù)的內(nèi)容成員(其中受保護(hù)的內(nèi)部成員只能在應(yīng)用程序的代碼或派生類中訪問。)
2、接口的特征是什么?使用接口的好處有哪些?
1)接口類似于抽象基類,不能直接實(shí)例接口,接口中的方法是抽象方法,實(shí)現(xiàn)接口的任何非抽象類型都必須實(shí)現(xiàn)接口的所有成員。
2)接口不能包含常量、字段、運(yùn)算符、實(shí)例構(gòu)造函數(shù)、析構(gòu)函數(shù)或類型,不能包含靜態(tài)成員。
3)接口成員是自動(dòng)公開的,且不能包含任何訪問修飾符。
4)接口自身可以從多個(gè)接口繼承,類和結(jié)構(gòu)可繼承多個(gè)接口,但接口不能繼承類。
接口首先是一種規(guī)范,其次接口有利于代碼的復(fù)用,擴(kuò)展性好,易于維護(hù)
3、Overload和Override的區(qū)別是什么?
1)OverLoad是重載,是有相同的方法名,但參數(shù)類型或個(gè)數(shù)彼此不同。返回值類型可以不同。
2)Override是重寫,是在子類與父類中,子類中的方法的方法名,參數(shù)個(gè)數(shù)、類型都與父類中的完全一樣,在子類中覆蓋掉了父類的該方法。返回值類型必須相同。
4、?靜態(tài)成員和非靜態(tài)成員的區(qū)別?
靜態(tài)變量使用static修飾符進(jìn)行聲明,在類被實(shí)例化時(shí)創(chuàng)建,通過類進(jìn)行訪問不帶有static修飾符聲明的變量稱作非靜態(tài)變量,在對象被實(shí)例化時(shí)創(chuàng)建,通過對象進(jìn)行訪問一個(gè)類的所有實(shí)例的同一靜態(tài)變量都是同一個(gè)值,同一個(gè)類的不同實(shí)例的同一非靜態(tài)變量可以是不同的值,靜態(tài)函數(shù)的實(shí)現(xiàn)里不能使用非靜態(tài)成員,如:非靜態(tài)變量、非靜態(tài)函數(shù)等。
5、描述數(shù)據(jù)庫連接過程?
開始?-->?引入命名空間?-->?創(chuàng)建一個(gè)SqlConnection?-->?打開連接?-->?創(chuàng)建一個(gè)SqlCommand?-->?獲取SqlDataReader對象?-->?關(guān)閉SqlDataReader對象?-->?關(guān)閉連接?-->?結(jié)束
6、什么是命名空間?怎樣引用命名空間?命名空間的作用是什么?不用命名空間可以嗎?
命名空間是類的邏輯的分組,它組成一個(gè)層次結(jié)構(gòu)—邏輯樹,這個(gè)樹的根是System
用using引入命名空間
作用:防止命名沖突
不可以
7、類的命名規(guī)范是什么?方法的命名規(guī)范是什么?
類:
1)類名應(yīng)該有意義。
2)類名應(yīng)該是名詞。
3)類名首字母應(yīng)該大寫。
4)若兩個(gè)單詞,每個(gè)單詞的首字母都大寫。
方法名:
1)動(dòng)+名詞并有意義
2)首字母小寫,多個(gè)單詞組合時(shí),第二個(gè)單詞首字母要大寫。
3)不能為關(guān)鍵字
8、構(gòu)造方法有什么特征?它的作用是什么?
特征:沒有返回值,方法名和類名一樣。
作用:初始化成員變量。
9、什么是封裝?什么是索引器?它們有什么區(qū)別與聯(lián)系?請舉例說明
封裝:將數(shù)據(jù)和操作組合到一起,并決定哪些數(shù)據(jù)和操作是對外可見的。
索引器:索引器是一種特殊的類成員,它能夠讓對象以類似數(shù)組的方式來存取,使過程看起來更為直觀,更容易編寫。
聯(lián)系:都有Get和Set而且都能通過它們對類里面的私有進(jìn)行訪問。
區(qū)別:
1)封裝名可自定義,索引器必須以this命名。
2)封裝可以為實(shí)例或靜態(tài),索引器必須是實(shí)例。
3)索引器有索引參數(shù)列表,封裝沒有。
封裝:
Private?int?id;
Public?int?Id{
Get{return?id;}
Set{id=value;}
}
或者:
Private?int?id;
Public?int?GetId(){
Return?id;
}
Public?void?SetId(){
This.id=id;
}
索引器:
Public?int?this[int?index]{
Get{
If(index==0)return?name;
Else?if(index==1)return?password
Else?return?null;
}
Set{
If(index==0)name=value;
Else?if(index==1)password=value;
}
}