C#抽象類和接口

接口:


所有成員默認爲public,因此接口中不能有private修飾符。
派生類必須實現接口的所有成員
一個類可以直接實現多個接口,接口之間用逗號隔開
一個接口可以有多個父接口,實現該接口的類必須實現所有父接口中的所有成員
實現類與接口是has關係 


抽象類:


不能用 sealed 修飾符修改抽象類,這意味着該類不能被繼承。
從抽象類派生的非抽象類必須包括繼承的所有抽象方法和抽象訪問器的實現。
在方法或屬性聲明中使用 abstract 修飾符以指示此方法或屬性不包含實現。
子類與抽象類是is關係

抽象方法:public abstract void MyMethod();  


接口與抽象類的相同點:


      1、不能直接實例化,都可以通過繼承實現其抽象方法。
      2、包含未實現的方法聲明;
      3、派生類必須實現未實現的方法,抽象類是抽象方法,接口則是所有成員(不僅是方法包括其他成員)。


接口與抽象類的區別:


1. 接口支持多繼承;抽象類不能實現多繼承。
2. 接口只能定義抽象規則;抽象類既可以定義規則,還可能提供已實現的成員。
3. 接口是一組行爲規範;抽象類是一個不完全的類,着重族的概念。
4. 接口可以用於支持回調;抽象類不能實現回調,因爲繼承不支持。
5. 接口只包含方法、屬性、索引器、事件的簽名,不能包含常量、字段(域)、構造函數、析構函數、靜態成員和包含實現的方法;抽象類可以定義字段、屬性、包含有實現的方法等。

6. 接口可以作用於值類型和引用類型;抽象類只能作用於引用類型。
7. 一個類可以實現多個接口,但只能繼承一個抽象類。
8. 抽象類實現了oop中的一個原則,把可變的與不可變的分離。抽象類和接口就是定義爲不可變的,而把可變的作爲子類去實現
9. 抽象類實現的具體方法默認爲虛的,但實現接口的類中的接口方法卻默認爲非虛的,當然也可以聲明爲虛的. 
10. 接口主要是對行爲的抽象,抽象類主要是對類的抽象


使用抽象類和接口
 
      1. 如果預計要創建組件的多個版本,則創建抽象類。抽象類提供簡單的方法來控制組件版本。
      2.如果創建的功能將在大範圍的全異對象間使用,則使用接口。如果要設計小而簡練的功能塊,則使用接口。
      3.如果要設計大的功能單元,則使用抽象類.如果要在組件的所有實現間提供通用的已實現功能,則使用抽象類。   
      4.抽象類主要用於關係密切的對象;而接口適合爲不相關的類提供通用功能。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章