可以说IsValid我的对象上有一个布尔属性.
我想创建一个方法,并确保在调用之后不更改IsValid,无论是在调用之前它是真还是假.
这样的事情有支持吗?
为此,[Pure]属性已添加到System.Diagnostic.Contracts命名空间.请参阅此处以获得进一步说 但是,您无法阻止更改单个属性.根本不允许该方法更改对象状态(如C++ const).
编辑:不幸的是,Pure属性不适用于当前工具.我使用以下代码实现了一个测试,在静态和运行时类型检查时都没有错误消息:
public class Test
{
private int x = 0;
[Pure]
public void Foo()
{
x++;
}
}
Run Code Online (Sandbox Code Playgroud)
关于纯支票的文件将在未来支持.无论什么时候("代码合同团队正在努力工作,因此在未来版本中提出纯度检查器.").
我一直在使用该属性相信它正常工作.文档说明在合同中调用的所有方法都必须声明为纯.它没有说明是否检查过.
所以你的问题的答案是:目前没有这方面的支持,但可能在将来.
我自己没有尝试过,但根据 MSDN Contract.OldValue可能有助于检查单个属性值是否未更改:
public bool IsValid
{
get
{
...
}
}
public void SomeMethod()
{
Contract.Ensures(this.IsValid == Contract.OldValue(this.IsValid));
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
385 次 |
| 最近记录: |