В настоящее время я читаю "С# in depth" от Jon Skeet и там пример, изображающий Code Contracts с абстрактным классом, реализующим интерфейс, который в качестве сопутствующего класса для интерфейса, в терминах 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() { }
}
(Я добавил комментарии в код, основанный на комментариях в книге)
Мой вопрос:
Почему необходимо добавить частный конструктор в этот абстрактный класс, если вы не можете создать экземпляр абстрактного класса для начала? Что я не получаю?