我刚开始使用Code Contracts,需要一点帮助来纠正错误:
鉴于此代码:
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'
似乎使很多标准支票无法使用。我在这个例子中缺少什么?
答案 0 :(得分:8)
已经解释过,_isUsed
有可见性问题(来电者没有控制权),这是由要求正确执行的。
但是,根据您要通过合同完成的工作,Contract.Assert
可能会满足您的需求。
public void SomeMethod()
{
Contract.Assert(!_isUsed);
}
当需求不是时,才有效。
答案 1 :(得分:5)
你有一个公共方法SomeMethod。但是,您要求将私有成员变量设置为false。您无法设置_isUsed,因此您要检查调用者无法控制的变量。
你可以_isUsed成为一个属性,即
public bool IsUsed {get; set;}
然后在你的SomeMethod()中
Contract.Requires(!IsUsed);