目前我正在阅读Jon Skeet的《深入理解C#》一书,其中有一个例子展示了使用抽象类实现接口并将其作为接口的附属类来进行代码合约。在Code Contracts术语中,这被称为“Contract Class For”(我不会在这里详细介绍Code Contracts的工作原理)。
接口(第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() { }
}
我的问题:
为什么需要在这个抽象类中添加私有构造函数,既然无法实例化抽象类?我哪里理解不正确?