dotnet 設計規範 · 抽象定義

嚴格來說,只有一個類被其他的類繼承,那麼這個類就是基類。在很多時候,基類的定義是提供足夠的抽象和通用方法和屬性、默認實現。在繼承關係中,基類定義在上層抽象和底層自定義之間。

他們充當抽象實現的實現幫助者,充當框架的部分。例如,處於框架的列表接口 IList 定義。定義一個 IList 在框架中具有重要的作用,可以抽象出具有數組列表的類型,有很多類都繼承這個接口,如System.Collections.ObjectModel.Collection:System.Collections.ObjectModel.KeyedCollection 但是這些類都定義了屬於自己的存儲方法。

基類有時候不適合充當自己的抽象,因爲他們存在太多需要定義的內容。例如Collection<T>基類包含了很多具體實現,很多都是在 IList 之外的方法,因爲集成的方式由於開放的方式。事實上,他是一個把數據字段裏,用字段來存儲內容的數組,其他的方法都是對存儲字段的封裝。

從上面的討論可以知道,基類對於定義抽象很有幫助,但是在定義的時候,基類需要有自己的職責,因爲基類添加了繼承深度所以對框架的複雜度會增加。所以定義基類必須基類具有意義。需要避免爲了定義相同的類型定義基類,基類的定義需要執行特殊的方法,基類定義需要很清楚。如果提供很多基類,需要讓開發者容易找到使用的基類而不是對繼承哪個基類需要經過想的時間很長。

✓ 建議設置基類抽象,即使他沒有任何抽象的方法或屬性。這個定義是任何需要使用這個類定義都需要繼承,但是另一個方法是設置這個類的構造是私有。

✓ 把基類和繼承類的命名空間分開,這樣基類有更大的擴展。

X 建議不要把公開的基類使用 Base 做後綴,如果一個類需要使用這個命名做後綴而無法取讓他有意義的命名,那麼這個基類可能是違反了上面的原則。

參見:docs/base-classes-for-implementing-abstractions.md at master · dotnet/docs

更多規範請看 dotnet 設計規範

我搭建了自己的博客 https://lindexi.gitee.io/ 歡迎大家訪問,裏面有很多新的博客。只有在我看到博客寫成熟之後纔會放在csdn或博客園,但是一旦發佈了就不再更新

如果在博客看到有任何不懂的,歡迎交流,我搭建了 dotnet 職業技術學院 歡迎大家加入

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