【原创】C#中的抽象类(abstract class)和接口(interface)的比较
在C#中抽象類和接口是兩個相當重要的概念,深入理解對C#程序員是非常必要的,現總結如下:
一、抽象類的特點:
1、抽象方法只用于方法的聲明并不包含方法的實現,可以看作沒有實現實體的虛方法。
2、抽象類不能進行實例化。
3、抽象類里面可以不包含抽象屬性和抽象方法,但如果包含抽象方法,則該類必須聲明為抽象類。
4、具體的派生類必須覆蓋基類的抽象方法。
5、抽象類也可以派生另一個抽象類,其中可以覆蓋基類的抽象方法也可以不用覆蓋,但是不覆蓋的話,
則其派生類比較覆蓋它們。
二、接口(interface)的特點
1、接口也不能進行實例化。
2、接口只能包含類的聲明。
3、成員可以包含屬性、方法、事件和索引器。
4、接口中不能包含常量、字段、構造函數、析構函數或靜態成員。
5、接口 中所有的成員都默認用public修飾符進行修飾,不能出現private修飾符。
6、派生類比較實現接口所有的成員。
7、一個可以繼承多個接口,接口之間用 , 分割。
8、一個接口可以有多個父接口,實現該接口的類必須實現所有父接口中的所有成員。
三、抽象類和接口的相同之處
1、都不能被實例化。
2、都可以被繼承。
3、都可以包含方法聲明。
4、派生類必須實現抽象類(接口)中未實現的方法。
四、抽象類和接口的不同之處
1、抽象類是一個不完整的類,需要進一步細化;接口只是一個行為的規范或規定。
2、抽象基類可以定義字段、屬性和方法實現;接口只能定義屬性、索引器、事件和方法聲明,不能包含字段。
3、抽象類更多的是定義在一系列關系緊密的類之間;接口大多定義在關系稀松但都實現某一功能的操作。
4、接口不具有繼承的任何特點。
5、接口可以被多重實現,抽象類只能被單一繼承。
6、接口支持回調,抽象類不可以。
7、抽象類不能密封。
8、抽象類實現的具體方法默認為虛的;但實現接口的類中的接口方法默認不是虛的,當然也可手動聲明為虛的。
9、接口和非抽象類類似,抽象類必須為在該類的基類列表中列出的接口的所有成員提供他自己的實現。但是允許抽象類將接口的方法隱射到抽象方法上。
10、如果抽象類實現接口,則可以把接口中的方法映射到抽象類中作為抽象方法而不必實現,而是在抽象類的子類中實現接口中的方法。
我的最新公眾號歡迎關注一下
總結
以上是生活随笔為你收集整理的【原创】C#中的抽象类(abstract class)和接口(interface)的比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Sailfish OS构建(1)
- 下一篇: JS中的bind()方法