C#中抽象類別和介面的區別

來源:互聯網
上載者:User

標籤:style   使用   strong   sp   on   bs   new   as   設計   

大家在編程時都容易把抽象類別和介面搞混,下面為大家從概念上講解抽象類別和介面的區別:

     一、抽象類別:

     含有abstract修飾符的class即為抽象類別,抽象類別是特殊的類,只是不能被執行個體化,可以建立一個變數,其類型是一個抽象類別,並讓它指向具體子類的一個執行個體;除此以外,具有類的其他特性;重要的是抽象類別可以包括抽象方法,這是普通類所不能的。抽象方法只能聲明於抽象類別中,且不包含任何實現,衍生類別必須覆蓋它們。另外,抽象類別可以派生自一個抽象類別,可以覆蓋基類的抽象方法也可以不覆蓋。

    二、介面:

    介面是參考型別的,類似於類,和抽象類別的相似之處有三點:     1、不能執行個體化;     2、包含未實現的方法聲明;     3、衍生類別必須實現未實現的方法,抽象類別是抽象方法,介面則是所有成員(不僅是方法包括其他成員);

    介面有如下特性:

    介面除了可以包含方法之外,還可以包含屬性、索引器、事件,而且這些成員都被定義為公有的。除此之外,不能包含任何其他的成員,例如:常量、域、建構函式、解構函式、靜態成員。一個類可以直接繼承多個介面,但只能直接繼承一個類(包括抽象類別)。  

   兩者的文法區別:

    1.抽象類別可以有構造方法,介面中不能有構造方法。

    2.抽象類別中可以有普通成員變數,介面中沒有普通成員變數

    3.抽象類別中可以包含非抽象的普通方法,介面中的所有方法必須都是抽象的,不能有非抽象的普通方法。

    4. 抽象類別中的抽象方法的訪問類型可以是public,protected,但介面中的抽象方法只能是public類型的,並且預設即為public abstract類型。

    5. 抽象類別中可以包含靜態方法,介面中不能包含靜態方法

    6. 抽象類別和介面中都可以包含靜態成員變數,抽象類別中的靜態成員變數的訪問類型可以任意,但介面中定義的變數只能是public static final類型,並且預設即為public static final類型。

    7. 一個類可以實現多個介面,但只能繼承一個抽象類別。

   8.介面可以用於支援回調,而繼承並不具備這個特點.    9.抽象類別實現的具體方法預設為虛的,但實現介面的類中的介面方法卻預設為非虛的,當然您也可以聲明為虛的.  

   抽象類別和介面的使用:

  1.如果預計要建立組件的多個版本,則建立抽象類別。抽象類別提供簡單的方法來控制組件版本。   2.如果建立的功能將在大範圍的全異對象間使用,則使用介面。如果要設計小而簡練的功能塊,則使用介面。   3.如果要設計大的功能單元,則使用抽象類別.如果要在組件的所有實現間提供通用的已實現功能,則使用抽象類別。   4.抽象類別主要用於關係密切的對象;而介面適合為不相關的類提供通用功能。

  5.好的介面定義應該是具有專一功能性的,而不是多功能的,否則造成介面汙染。如果一個類只是實現了這個介面的中一個功能,而不得不去實現介面中的其他方法,就叫介面汙染。  

C#中抽象類別和介面的區別

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.