Я следую учебному пособию по кодексам (https://docs.microsoft.com/en-us/dotnet/framework/debug-trace-profile/code-contracts#usage-guidelines), и мне кажется, что я не могу заставить работать самую простую вещь. Учитывая определение метода
public int Add(int x, int y)
{
Contract.Requires(x > 0);
Contract.Requires(y > 0);
return x+y;
}
, когда я вызываю o.Add(0,0)
методне проходит проверку предварительного условия. Когда я нахожусь в режиме отладки, пропускаются операторы Contract.Requires()
. Где я делаю неправильно?
Второй вопрос: можно ли использовать Contract.Invariant()
для проверки инварианта цикла?к определению инварианта объекта Object invariants are conditions that should be true for each instance of a class whenever that object is visible to a client.
, который, кажется, немного отличается от инварианта цикла, так как в каждой итерации цикла инвариант цикла может не обязательно быть видимым для клиента, поэтому он может нарушать свойство, но не проверяться. Является ли это понимание правильным??