每日一練 之 c#之介面與抽象類別

來源:互聯網
上載者:User

以前c++的時候大家用虛類,而沒有介面的概念,因為c++是多根派生的。

C#變成了單根派生,一個類只能繼承自一個父類,但可以繼承於多個介面,其中的抽象類別與介面之間有許多相同點。

首先說介面,介面的定義是包含一組虛方法的載體,是嚴格的CAN-DO關係,這個東西可以包含方法的聲明但不能包含實現,CLR允許介面包含事件,屬性,索引器,靜態方法,靜態欄位,靜態建構函式和常數,但是c#不允許介面包含任何靜態成員,所以儘管CLR允許,但C#語言不支援。

然後是抽象類別,抽象類別的定義是提供多個衍生類別共用基類的定義,是嚴格的IS-A的關係。抽象類別可以包含抽象方法,也可以包含具體的實現,抽象類別也與介面一樣不能被執行個體化。

在開發過程中我們會覺得這兩個東西貌似很一樣,實則不是這樣子的,所有的類繼承都必須遵循IS-A的關係,而介面的繼承則遵循CAN-DO的關係。

他們的相同點:
1 都不能被執行個體化 都是通過繼承實現他們的抽象方法
2 都是面向抽象編程的基礎 是設計模式的基礎

他們的不同點:
1 介面支援多繼承 類是單根派生機制的
2 介面只聲明 抽象類別可以實現
3 介面是行為規範 抽象類別是不完全的類 更注重家族的實現
4 介面可以用於支援回調 抽閑類不能實現回調 因為繼承不支援
5 介面可以用於實值型別 比如struct繼承自介面 但是抽象類別不可以

他們的應用場合
1 物件導向就是面向介面
2 抽象類別用於組織關係密切的對象 是IS-A 介面更注重給多個不相關的類聲明通用功能
3 介面多定義行為 抽象類別多定義屬性
4 介面不變 是永久的 在未來的不斷變化的商業邏輯面前 介面是有增無減也無改的

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.