Да, это возможно - все, что нужно, это добавить условие вашего контракта к методу [ContractInvariantMethod]
в вашем классе, который затем добавляет эквивалентное предварительное условие Requires
к автоматическому set
ter и условие публикации Ensures
добавляется к get
. Из раздела 2.3.1 Ссылка
Как показывает пример, инварианты авто-свойств превращаются в:
- Предварительное условие для сеттера
- Постусловие для геттера
- Инвариант для базового базового поля
И к примеру:
public int MyProperty { get; private set ;}
[ContractInvariantMethod]
private void ObjectInvariant ()
{
Contract.Invariant ( this.MyProperty >= 0 );
}
"Эквивалентно следующему коду:"
private int backingFieldForMyProperty;
public int MyProperty
{
get
{
Contract.Ensures(Contract.Result<int>() >= 0);
return this.backingFieldForMyProperty;
}
private set
{
Contract.Requires(value >= 0);
this.backingFieldForMyProperty = value;
}
}
[ContractInvariantMethod]
private void ObjectInvariant ()
{
Contract.Invariant ( this.backingFieldForMyProperty >= 0 );
...