你必須知道的.net讀書筆記之第二回深入淺出關鍵字—對抽象程式設計:介面和抽象類

四方雲動發表於2018-09-20
  1. 請記住,物件導向思想的一個最重要的原則就是:面向介面程式設計。
  2. 藉助介面和抽象類,23個設計模式中的很多思想被巧妙的實現了,我認為其精髓簡單說來就是:面向抽象程式設計。
  3. 抽象類應主要用於關係密切的物件,而介面最適合為不相關的類提供通用功能。
  4. 介面著重於CAN-DO關係型別,而抽象類則偏重於IS-A式的關係;
  5. 介面多定義物件的行為;抽象類多定義物件的屬性; 
  6. 介面定義可以使用public、protected、internal 和private修飾符,但是幾乎所有的介面都定義為public,原因就不必多說了。
  7. “介面不變”,是應該考慮的重要因素。所以,在由介面增加擴充套件時,應該增加新的介面,而不能更改現有介面。
  8. 儘量將介面設計成功能單一的功能塊,以.NET Framework為例,IDisposable、IDisposable、IComparable、IEquatable、IEnumerable等都只包含一個公共方法。
  9. 介面名稱前面的大寫字母“I”是一個約定,正如欄位名以下劃線開頭一樣,請堅持這些原則。
  10. 在介面中,所有的方法都預設為public。 
  11. 如果預計會出現版本問題,可以建立“抽象類”。例如,建立了狗(Dog)、雞(Chicken)和鴨(Duck),那麼應該考慮抽象出動物(Animal)來應對以後可能出現風馬牛的事情。而向介面中新增新成員則會強制要求修改所有派生類,並重新編譯,所以版本式的問題最好以抽象類來實現。
  12. 從抽象類派生的非抽象類必須包括繼承的所有抽象方法和抽象訪問器的實實現。
  13. 對抽象類不能使用new關鍵字,也不能被密封,原因是抽象類不能被例項化。
  14. 在抽象方法宣告中不能使用 static 或 virtual 修飾符。 
  15. .NET Framework是學習的最好資源,有意識的研究FCL是每個.NET程式設計師的必修課,關於介面和抽象類在FCL中的使用,我有以下的建議:

    1. FCL對集合類使用了基於介面的設計,所以請關注System.Collections中關於介面的設計實現;
    2. FCL對資料流相關類使用了基於抽象類的設計,所以請關注System.IO.Stream類的抽象類設計機制。

相關文章