Dav*_*ams 8 .net-4.0 code-contracts
我刚开始使用Code Contracts,需要一些帮助来纠正错误:
鉴于此代码:
class MyClass
{
private bool _isUsed = false;
public void SomeMethod()
{
Contract.Requires(!_isUsed);
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
error CC1038: Member 'MyClass._isUsed' has less visibility than the enclosing method 'MyClass.SomeMethod'
Run Code Online (Sandbox Code Playgroud)
这似乎使很多标准检查不可用.我在这个例子中缺少什么?
已经解释过,要么_isUsed具有可见性问题(调用者没有控制权),要么正确执行.
但是,根据您要通过合同完成的任务,Contract.Assert可能会满足您的需求.
public void SomeMethod()
{
Contract.Assert(!_isUsed);
}
Run Code Online (Sandbox Code Playgroud)
当需求不是时,它将是有效的.
你有一个公共方法SomeMethod.但是,您要求将私有成员变量设置为false.您无法设置_isUsed,因此您要检查调用者无法控制的变量.
你可以将_isUsed变成属性即
public bool IsUsed {get; set;}
Run Code Online (Sandbox Code Playgroud)
然后在你的SomeMethod()中
Contract.Requires(!IsUsed);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1187 次 |
| 最近记录: |