X 不要定义 public 或 protected internal 访问的构造函数。默认 C# 语言不提供抽象类的公开构造函数方法。框架
若是一个构造函数定义为公开,只有在开发者须要建立这个类的实例的时候才能够这样作。由于开发者不该该建立一个抽象类的实例,因此若是一个抽象类能够建立实例就是一个很差的实现,容易让开发者作出不恰当代码。函数
✓ 定义抽象类的构造函数为 protected 或 internal 访问测试
定义抽象类的构造函数为 protected 是比较推荐的方法,由于定义为 protected 让这个类只能在基类继承,建立可实例化的基类的实例。设计
定义抽象类的构造函数为 internal 能够限制开发者只能在只是程序集内使用这个类,固然即便定义为 internal 仍是没法建立抽象类的实例。继承
✓ 提供至少一个可实例化类继承抽象类在本身的库里。开发
作这个是为了方便验证抽象类的设计。如 System.IO.FileStream 继承抽象类 System.IO.Stream 并且 FileStream 能够建立实例。构造函数
固然这个只是建议,若是在开发一个 dotnet standard 项目,须要注入一个和具体框架有关的类,因而先设计一个抽象类放在库。在具体的 dotnet framework 等框架建立这个抽象类的基类,用于作和具体平台相关代码。那么不在库放一个实现抽象类的类也是能够的。可是这时建议在测试项目继承这个抽象类,尝试测试类的设计。程序