Dot-Net-4.0
Code Contract 理解錯誤
我剛剛開始使用程式碼契約,需要一些幫助來糾正錯誤:
鑑於此程式碼:
class MyClass { private bool _isUsed = false; public void SomeMethod() { Contract.Requires(!_isUsed); } }我收到以下錯誤:
error CC1038: Member 'MyClass._isUsed' has less visibility than the enclosing method 'MyClass.SomeMethod'這似乎使許多標準檢查不可用。我在這個例子中遺漏了什麼?
你有一個公共方法 SomeMethod。但是,您需要將私有成員變數設置為 false。您無法設置 _isUsed,因此您要檢查呼叫者無法控制的變數。
你可以把 _isUsed 變成一個屬性,即
public bool IsUsed {get; set;}然後在你的 SomeMethod() 中有
Contract.Requires(!IsUsed);
已經解釋過兩者
_isUsed都存在可見性問題(呼叫者沒有控制權),這是由要求正確執行的。但是,根據您試圖通過契約完成的任務,
Contract.Assert可能會滿足您的需求。public void SomeMethod() { Contract.Assert(!_isUsed); }Requires 無效時有效。