编程语言
首页 > 编程语言> > C#代码合同:为什么不能证明这个简单的条件?

C#代码合同:为什么不能证明这个简单的条件?

作者:互联网

我正在对代码合同进行简单的测试.以下代码处于winform状态.这通过(当然):

    private void Test(Form form)
    {
        Contract.Requires(!string.IsNullOrEmpty(form.Name));

        MessageBox.Show(form.Name);
    }

    protected override void onl oad(EventArgs e)
    {
        if (!string.IsNullOrEmpty(Name))
            Test(this);

        base.OnLoad(e);
    }

但是,我只添加了一个非常简单的间接层,它说“需要未经证实”:

    private bool Valid(string str)
    {
        return !string.IsNullOrEmpty(str);
    }

    protected override void onl oad(EventArgs e)
    {
        if (Valid(Name))
            Test(this);

        base.OnLoad(e);
    }

这似乎证明是微不足道的.为什么不工作?

解决方法:

您的有效方法没有任何合同.你可以在那里表达合同,这可能只是代码相同,真的……但代码合同不会假设.您的实现可能会发生变化 – 您尚未告知代码合同该方法的用途,因此它不会从实现中承担任何内容.

标签:c,code-contracts
来源: https://codeday.me/bug/20190526/1158251.html