我目前正在阅读 Jon Skeet 的“深入 C#”,并且有一个示例描述了代码契约,其中抽象类实现了一个接口,该接口以代码契约的术语作为接口的伴随类:“契约类”(我不会在这里详细介绍代码合同的工作原理)。
界面(第 467 页):
[ContractClass(typeof(ICaseConverterContracts))]
public interface ICaseConverter
{
string Convert(string text);
}
抽象类:
[ContractClassFor(typeof(ICaseConverter))]
internal abstract class ICaseConverterContracts : ICaseConverter
{
public string Convert(string text)
{
Contract.Requires(text != null);
Contract.Ensures(Contract.Result<string>() != null);
return default(string); // returns dummy value
}
// prevents instantiation
private ICaseConverterContracts() { }
}
(我根据书中的注释在代码中添加了注释)
我的问题:
既然不能实例化一个抽象类,为什么还要给这个抽象类添加私有构造函数呢?我没有得到什么?