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