關於抽象類與接口的選擇


 

  1. 如果准備為不相關的類創建一些提供共有功能的東西,請使用接口。
  2. 抽象類允許你為子類提供默認功能。
  3. 如果要為層次結構中密切相關的對象創建內容,請使用抽象類。
  4. 如果基類經常更改並且使用了接口替代了抽象類,那么我們將遇到問題。一旦接口更改,所有實現該接口的類都將被破壞。如果你現在只在項目中使用它們,那么問題不大。然而一旦發布到客戶端,這些接口就應該被鎖定。否則那時你將破壞客戶端的代碼。
  5. 相比接口,抽象類可以有實現。沒有實現的抽象類跟接口沒什么區別。但是C#允許實現你繼承、實現多個接口,但是只允許繼承一個基類。
  6. 接口一旦部署即凍結,你不得更改已部署的接口。如果更改接口那將破壞二進制兼容性,但是只要你不更改方法簽名就可以擴展抽象類。
  7. 接口中方法的簽名只能是public,而抽象類中抽象方法可以有public、 protected 、internal、或者protected internal幾種訪問級別。

使用抽象方法

當創建一個將廣泛分發或重用的類庫時(尤其是客戶端),使用優先於接口的抽象類。因為這能簡化版本控制。這是微軟團隊開發基礎類庫時的慣例(COM除外,因為COM是圍繞接口設計的)。

使用抽象類為類型家族定義共同的基類。

使用抽象類提供默認的行為。

子類只是類邏輯上屬於的層次結構中的基類。

使用接口

當創建一個可以被隨意更改的獨立項目時,使用優先於抽象類的接口,因為它提供更多的設計靈活性。

使用接口來引入多態行為而無需子類化並模擬多重繼承 - 允許特定類型支持多種行為。

使用接口為值類型設計多態層次結構。

當真正的意圖是協議永遠不變,那么使用接口。

設計良好的接口定義了一個特定的功能范圍,拆分不包含相關功能的接口。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM