C#—接口和抽象類的區別?

轉載於 http://www.javashuo.com/article/p-qcpimueo-kh.htmlhtml

 

1、接口編程

接口是指對協定進行定義的引用類型,其餘類型實現接口,以保證它們支持某些操做。接口指定必須由類提供的成員或實現它的其餘接口。與類類似,接口能夠包含方法、屬性、索引器和事件做爲成員。ide

一、接口存在的意義是爲了實現多態;函數


二、接口中只能包含方法(屬性、事件、索引);post


三、接口的成員不能有任何實現;設計


四、接口不能被實例化;靜態類、抽象類也不能夠被實例化htm


五、接口的成員不能有訪問修飾符(默認爲public);對象


六、實現接口的子類必須將接口的全部成員函數實現;blog


七、子類實現接口的方法時,不須要任何關鍵字,直接實現便可。(抽象類、虛方法須要加override)繼承

2、抽象類

抽象類,在面向對象過程當中,全部的對象都是類描繪的,反過來,類裏面的數據不足以把具體的對象描繪出來,這樣的類就是抽象類

一、抽象方法只能出如今抽象類中,可是抽象類中能夠包含普通方法。

二、在父類中定義的抽象方法不能實現。

三、抽象類不能實例化(也就是不能new出來)。

四、抽象類與抽象方法須要添加abstract關鍵字。

五、子類實現父類的抽象方法時,須要添加override關鍵字。

六、若是抽象類的子類不是抽象類,那麼子類中必須重寫父類抽象類的全部抽象方法。

 

3、抽象類和接口的區別

 

相同點

  1.不能實例化;

  2.包含未實現的方法聲明

  3.派生類必須實現未實現的方法,抽象類是抽象方法,接口則是全部成員(不只是方法包括其餘成員)

 

不一樣點

 

  1.接口能夠多繼承,抽象類不能實現多繼承。

  2.接口只能定義抽象規則,抽象類既能定義抽象規則也能提供已實現的成員

  3.接口是一組行爲規範,抽象類是一個不徹底的類,着重於族的概念

  4.接口支持回調,抽象類不能實現回調,由於繼承不支持。

  5.接口只包含方法、屬性、索引器、事件的簽名,但不能定義字段和包含實現的方法,抽象類能夠定義屬性、字段、包含有實現的方法

  6.接口能夠做用於值類型和引用類型,抽象類只能做用於引用類型(例如:Struct只能繼承接口)

  7.抽象類應主要用於關係密切的對象,而接口則是適合爲不相關的類提供通用功能

  8.接口着重於Can—Do關係類型,抽象類則偏重於IS—A式關係。

  9.接口多定義對象的行爲,抽象類多定義對象的屬性。

  10.若是要設計小而簡練的功能塊,則使用接口,若是要設計大的功能單元,則使用抽象類

  11.接口對應是面向對象編程思想的重要原則:面向接口編程

相關文章
相關標籤/搜索