我正在对代码合同进行简单的测试.以下代码处于winform状态.这通过(当然):
private void Test(Form form)
{
Contract.Requires(!string.IsNullOrEmpty(form.Name));
MessageBox.Show(form.Name);
}
protected override void OnLoad(EventArgs e)
{
if (!string.IsNullOrEmpty(Name))
Test(this);
base.OnLoad(e);
}
Run Code Online (Sandbox Code Playgroud)
但是,我只添加了一个非常简单的间接层,它说"需要未经证实":
private bool Valid(string str)
{
return !string.IsNullOrEmpty(str);
}
protected override void OnLoad(EventArgs e)
{
if (Valid(Name))
Test(this);
base.OnLoad(e);
}
Run Code Online (Sandbox Code Playgroud)
这似乎证明是微不足道的.为什么不工作?
你的Valid方法没有任何合同.你可以在那里表达合同,这可能只是代码相同,真的......但代码合同不会假设.您的实现可能会发生变化 - 您尚未告知代码合同该方法的用途,因此它不会从实现中承担任何内容.