В общем, это кажется проблематичным требованием, так как вызов f
может вызвать побочные эффекты, поэтому указание контракта может повлиять на то, что делает метод.
Как разработчик библиотеки Code Contracts, можно ввести код-обертку, который проверяет, соответствует ли значение f
контракту, когда оно вызывается в контексте вашего метода (чтобы избежать введения ложного метода).вызов).Это проблематично по нескольким причинам:
- Этот метод может никогда не вызвать
f
, поэтому вызывающая сторона может нарушить контракт и не быть заблокированной. - Метод может вызвать
f
только после выполнения какой-либо другой работы, которая может быть недействительной, учитывая, что вызов f
не удовлетворяет спецификации.
Если бы у f
не было побочных эффектов, тогда они не были быпроблемы, но при наличии побочных эффектов, связанных с 1, всегда вызывать f
не сработает, а вызов f
до выполнения какой-либо работы с 2 также не сработает.заключение Я не думаю, что это возможно (в контексте контрактов с нативным кодом) и по уважительной причине.