C#中的接口和類有什么異同?
不同點(diǎn)
- 不能直接實(shí)例化接口纳击。
- 接口不包含方法的實(shí)現(xiàn)。
- 接口可以多繼承攻臀,類只能單繼承焕数。
- 類定義可在不同的源文件之間進(jìn)行拆分。
相同點(diǎn)
- 接口刨啸、類和結(jié)構(gòu)都可以從多個(gè)接口繼承堡赔。
- 接口類似于抽象基類:繼承接口的任何非抽象類型都必須實(shí)現(xiàn)接口的所有成員。
- 接口和類都可以包含事件设联、索引器善已、方法和屬性灼捂。
什么是接口?
接口只能定義方法(只能定義行為换团,不能定義實(shí)現(xiàn)也就是字段)悉稠,因?yàn)槭录⑺饕魉野傩员举|(zhì)上都是方法的猛,所以接口中也可以定義事件、索引器想虎、屬性卦尊。
abstract class(抽象類)和 interface(接口)有什么區(qū)別?
相同點(diǎn)
- 都不能被直接實(shí)例化,都可以通過繼承實(shí)現(xiàn)其抽象方法舌厨。
不同點(diǎn)
- 接口支持多繼承岂却;抽象類不能實(shí)現(xiàn)多繼承。
- 接口只能定義行為裙椭;抽象類既可以定義行為躏哩,還可能提供實(shí)現(xiàn)。
- 接口只包含方法(Method)骇陈、屬性(Property)震庭、索引器(Index)、事件(Event)的簽名你雌,但不能定義字段和包含實(shí)現(xiàn)的方法器联。
- 抽象類可以定義字段、屬性婿崭、包含有實(shí)現(xiàn)的方法拨拓。
- 接口可以作用于值類型(Struct)和引用類型(Class);抽象類只能作用于引用類型氓栈。
請(qǐng)敘述屬性與索引器的區(qū)別渣磷。
- 索引器以函數(shù)簽名方式
this
來標(biāo)識(shí),而屬性采用名稱來標(biāo)識(shí)授瘦,名稱可以任意 - 索引器可以重載醋界,而屬性不能重載。
- 索引器不能用
static
來進(jìn)行聲明提完,而屬性可以形纺。索引器永遠(yuǎn)屬于實(shí)例成員,因此不能聲明為static
徒欣。
什么是索引器逐样?
是一種特殊的類成員,它能夠讓對(duì)象以類似數(shù)組的方式來存取,使程序看起來更為直觀脂新,更容易編寫挪捕。
C#支持多重繼承么?
- 類之間不支持争便,接口之間支持级零。類對(duì)接口叫做實(shí)現(xiàn),不叫繼承始花。
(類是爹妄讯、接口是能力,能有多個(gè)能力酷宵,但不能有多個(gè)爹亥贸。)
C#中所有對(duì)象共同的基類是什么?
- System.Object