嚴格來講,只有一個類被其餘的類繼承,那麼這個類就是基類。在不少時候,基類的定義是提供足夠的抽象和通用方法和屬性、默認實現。在繼承關係中,基類定義在上層抽象和底層自定義之間。數組
他們充當抽象實現的實現幫助者,充當框架的部分。例如,處於框架的列表接口 IList 定義。定義一個 IList 在框架中具備重要的做用,能夠抽象出具備數組列表的類型,有不少類都繼承這個接口,如System.Collections.ObjectModel.Collection
、:System.Collections.ObjectModel.KeyedCollection
可是這些類都定義了屬於本身的存儲方法。框架
基類有時候不適合充當本身的抽象,由於他們存在太多須要定義的內容。例如Collection<T>
基類包含了不少具體實現,不少都是在 IList 以外的方法,由於集成的方式因爲開放的方式。事實上,他是一個把數據字段裏,用字段來存儲內容的數組,其餘的方法都是對存儲字段的封裝。code
從上面的討論能夠知道,基類對於定義抽象頗有幫助,可是在定義的時候,基類須要有本身的職責,由於基類添加了繼承深度因此對框架的複雜度會增長。因此定義基類必須基類具備意義。須要避免爲了定義相同的類型定義基類,基類的定義須要執行特殊的方法,基類定義須要很清楚。若是提供不少基類,須要讓開發者容易找到使用的基類而不是對繼承哪一個基類須要通過想的時間很長。繼承
✓ 建議設置基類抽象,即便他沒有任何抽象的方法或屬性。這個定義是任何須要使用這個類定義都須要繼承,可是另外一個方法是設置這個類的構造是私有。接口
✓ 把基類和繼承類的命名空間分開,這樣基類有更大的擴展。開發
X 建議不要把公開的基類使用 Base 作後綴,若是一個類須要使用這個命名作後綴而沒法取讓他有意義的命名,那麼這個基類多是違反了上面的原則。io