C# 在实现接口时通过属性确保未经验证
在我看来,我正在尝试一些相当基本的代码。我把它归结为以下问题。以下是静态分析失败的消息: 编码合同:确保未经验证: 这个,冷冻的 但是,以下各项可以正常工作并满足所有检查要求:C# 在实现接口时通过属性确保未经验证,c#,.net,code-contracts,C#,.net,Code Contracts,在我看来,我正在尝试一些相当基本的代码。我把它归结为以下问题。以下是静态分析失败的消息: 编码合同:确保未经验证: 这个,冷冻的 但是,以下各项可以正常工作并满足所有检查要求: using System; using System.Diagnostics.Contracts; namespace PlayAreaCollection2010 { public class StrippedContract { private bool _frozen = fals
using System;
using System.Diagnostics.Contracts;
namespace PlayAreaCollection2010
{
public class StrippedContract
{
private bool _frozen = false;
public void Freeze()
{
Contract.Ensures(this.Frozen);
_frozen = true;
}
public bool Frozen { get { return _frozen; } }
}
}
CodeContracts:已检查1断言:1正确
当我将合同放入界面时,我需要做什么才能满足静态检查器的要求?在
IBasic
,StrippedContract
的实现中,您需要向冻结的属性添加一个post条件:
public bool Frozen {
get {
Contract.Ensures(Contract.Result<bool>() == this._frozen);
return _frozen;
}
}
public bool冻结{
得到{
Contract.survey(Contract.Result()=此项已冻结);
退货-冻结;
}
}
或者,您可以将-infer
命令行选项添加到项目属性的“代码合同”选项卡中的静态检查器中。这将允许静态检查器自动推断。谢谢,这样就可以了。只是快速浏览了一下google,但没有任何帮助-为什么当契约在类本身上时,而不是在接口上定义时,检查器能够做出这种推断?
public bool Frozen {
get {
Contract.Ensures(Contract.Result<bool>() == this._frozen);
return _frozen;
}
}