1. 程式人生 > >c#中抽象類(abstract)和介面(interface)的異同

c#中抽象類(abstract)和介面(interface)的異同

抽象類:

1.抽象方法只作宣告,而不包含實現,可以看成是沒有實現體的虛方法
2.抽象類可以但不是必須有抽象屬性和抽象方法,但是一旦有了抽象方法,就一定要把這個類宣告為抽象類
3.具體派生類必須覆蓋基類的抽象方法
4.抽象派生類可以覆蓋基類的抽象方法,也可以不覆蓋。如果不覆蓋,則其具體派生類必須覆蓋它們。
5.抽象類不能被例項化
介面:
1.介面不能被例項化
  2.介面只能包含方法宣告
  3.介面的成員包括方法、屬性、索引器、事件
  4.介面中不能包含常量、欄位()、建構函式、解構函式、靜態成員。
  5.介面中的所有成員預設為public,因此介面中不能有private
修飾符   6.派生類必須實現介面的所有成員   7.一個類可以直接實現多個介面,介面之間用逗號隔開   8.一個介面可以有多個父介面,實現該介面的類必須實現所有父介面中的所有成員。

相同點:

  1. 都可以被繼承
  2. 都不能被例項化
  3. 都可以包含方法宣告
  4. 、派生類必須實現未實現的方法

區別:

  1.  抽象基類可以定義欄位、屬性、方法實現。介面只能定義屬性、索引器、事件、和方法宣告,不能包含欄位。

      2、介面可以被多重實現,抽象類只能被單一繼承

  3、抽象類是一個不完整的類,需要進一步實現(繼承,並實現方法)。介面是一個行為規範,可以直接繼承引用
  4、介面基本不具備繼承的特性,僅僅能夠呼叫而已。
  5、介面可以用於支援回撥,而繼承並不具備這個特點。
  1. 如果抽象類中實現介面,則可以把介面中方法對映到抽象類中作為抽象方法而不必實現,而在抽象類的子類中實現介面方法
目標
選擇
建立多個元件版本
抽象類
設計小而簡練的功能塊
介面
設計大型功能單元
抽象類