- 請記住,物件導向思想的一個最重要的原則就是:面向介面程式設計。
- 藉助介面和抽象類,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類的抽象類設計機制。
你必須知道的.net讀書筆記之第二回深入淺出關鍵字—對抽象程式設計:介面和抽象類
相關文章
- is 和 as 讀你必須知道的.net 筆記筆記
- using 你知道多少?你必須知道的.NET讀書筆記筆記
- Const和Readonly大比拼讀你必須知道的.net讀書筆記筆記
- 介面的行為抽象和抽象類的行為抽象抽象
- 介面、抽象類、普通類之間的關係抽象
- 抽象類和介面抽象
- 抽象類和介面,你瞭解多少?抽象
- 深入淺出node讀書筆記筆記
- 【JAVA】筆記(5)--- final;抽象方法;抽象類;介面;解析繼承,關聯,與實現;Java筆記抽象繼承
- 介面和抽象類 (abstract)抽象
- 面向介面程式設計實踐之aspnetcoreapi的抽象程式設計NetCoreAPI抽象
- New的幾個問題 詳解 --讀你必須知道的.NET筆記筆記
- 關於抽象類和介面的初步理解抽象
- 介面和抽象類的區別抽象
- java中抽象類和介面Java抽象
- 介面和抽象類詳解抽象
- 抽象方法和抽象類抽象
- Java的抽象類 & 介面Java抽象
- 從零開始的Java程式設計之抽象與介面Java程式設計抽象
- Java中的介面與抽象類設計原則Java抽象
- 抽象類VS介面抽象
- 抽象類與介面抽象
- Java基礎-抽象類和介面Java抽象
- Java抽象類和介面 小白版Java抽象
- 淺談Java抽象類Java抽象
- java介面和抽象類的簡單理解Java抽象
- 抽象類 & 介面比較抽象
- Python 學習筆記之類「物件導向,超類,抽象」Python筆記物件抽象
- python3筆記---抽象類例子Python筆記抽象
- 抽象類特點 學習筆記抽象筆記
- Java之繼承和抽象類Java繼承抽象
- 《Go 語言程式設計》讀書筆記(四)介面Go程式設計筆記
- Web 開發學習筆記(5) — 抽象出 Page 類Web筆記抽象
- 介面和抽象理解抽象
- PHP中的 抽象類(abstract class)和 介面(interface)PHP抽象
- java中的抽象類與介面Java抽象
- Java的抽象類與介面理解Java抽象
- 關於Java中的物件、類、抽象類、介面、繼承之間的聯絡Java物件抽象繼承