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