X 不要定義 public 或 protected internal 訪問的構造函數。默認 C# 語言不提供抽象類的公開構造函數方法。框架
若是一個構造函數定義爲公開,只有在開發者須要建立這個類的實例的時候才能夠這樣作。由於開發者不該該建立一個抽象類的實例,因此若是一個抽象類能夠建立實例就是一個很差的實現,容易讓開發者作出不恰當代碼。函數
✓ 定義抽象類的構造函數爲 protected 或 internal 訪問測試
定義抽象類的構造函數爲 protected 是比較推薦的方法,由於定義爲 protected 讓這個類只能在基類繼承,建立可實例化的基類的實例。設計
定義抽象類的構造函數爲 internal 能夠限制開發者只能在只是程序集內使用這個類,固然即便定義爲 internal 仍是沒法建立抽象類的實例。繼承
✓ 提供至少一個可實例化類繼承抽象類在本身的庫裏。開發
作這個是爲了方便驗證抽象類的設計。如 System.IO.FileStream 繼承抽象類 System.IO.Stream 並且 FileStream 能夠建立實例。構造函數
固然這個只是建議,若是在開發一個 dotnet standard 項目,須要注入一個和具體框架有關的類,因而先設計一個抽象類放在庫。在具體的 dotnet framework 等框架建立這個抽象類的基類,用於作和具體平臺相關代碼。那麼不在庫放一個實現抽象類的類也是能夠的。可是這時建議在測試項目繼承這個抽象類,嘗試測試類的設計。程序