c#中抽象類(abstract)和介面(interface)的異同
阿新 • • 發佈:2018-12-29
抽象類:
1.抽象方法只作宣告,而不包含實現,可以看成是沒有實現體的虛方法
2.抽象類可以但不是必須有抽象屬性和抽象方法,但是一旦有了抽象方法,就一定要把這個類宣告為抽象類
3.具體派生類必須覆蓋基類的抽象方法 4.抽象派生類可以覆蓋基類的抽象方法,也可以不覆蓋。如果不覆蓋,則其具體派生類必須覆蓋它們。
5.抽象類不能被例項化
介面:
1.介面不能被例項化
2.介面只能包含方法宣告 3.介面的成員包括方法、屬性、索引器、事件 4.介面中不能包含常量、欄位(域)、建構函式、解構函式、靜態成員。
5.介面中的所有成員預設為public,因此介面中不能有private修飾符 6.派生類必須實現介面的所有成員 7.一個類可以直接實現多個介面,介面之間用逗號隔開 8.一個介面可以有多個父介面,實現該介面的類必須實現所有父介面中的所有成員。
相同點:
- 都可以被繼承
- 都不能被例項化
- 都可以包含方法宣告
- 、派生類必須實現未實現的方法
區別:
- 抽象基類可以定義欄位、屬性、方法實現。介面只能定義屬性、索引器、事件、和方法宣告,不能包含欄位。
2、介面可以被多重實現,抽象類只能被單一繼承
3、抽象類是一個不完整的類,需要進一步實現(繼承,並實現方法)。介面是一個行為規範,可以直接繼承引用
4、介面基本不具備繼承的特性,僅僅能夠呼叫而已。
5、介面可以用於支援回撥,而繼承並不具備這個特點。
- 如果抽象類中實現介面,則可以把介面中方法對映到抽象類中作為抽象方法而不必實現,而在抽象類的子類中實現介面方法
目標
|
選擇
|
建立多個元件版本
|
抽象類
|
設計小而簡練的功能塊
|
介面
|
設計大型功能單元
|
抽象類
|