關於抽象類與接口的選擇

 

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

使用抽象方法

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

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

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

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

使用接口

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

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

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

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

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章