1

我正在尝试使用 c# 合同编写此方法...但是在调试时,它完全忽略了 Contract.requires 和 CheckRep() 我是否使用不正确?

    public Poly Add(Poly q)
    {
        CheckRep();
        Contract.Requires(q != null, "You need to provide a valid non-null Poly.");

        Poly la, sm;

        if (deg > q.deg)
        {
            la = this; sm = q;
        }
        else
        {
            la = q; sm = this;
        }

        int newdeg = la.deg;

        if (deg == q.deg)
        {
            for (int k = deg; k > 0; k--)
            {
                if (trms[k] + q.trms[k] != 0)
                {
                    break;
                }
                else
                {
                    newdeg--;
                }
            }
        }

        Poly r = new Poly(newdeg);

        int i;

        for (i = 0; i <= sm.deg && i <= newdeg; i++)
        {
            r.trms[i] = sm.trms[i] + la.trms[i];
        }
        for (int j = i; j <= newdeg; j++)
        {
            r.trms[j] = la.trms[j];
        }

        return r;
    }
4

1 回答 1

3

它一定要是:

  public Poly Add(Poly q)
    {
        Contract.Requires(q != null, "You need to provide a valid non-null Poly.");
        CheckRep();

来自MSDN

  1. 此方法调用必须在方法或属性的开头,在任何其他代码之前。

  2. 本合同向客户公开;因此,它只能引用至少与封闭方法一样可见的成员。

  3. 如果要在前置条件失败时抛出异常,请使用此方法而不是 Contract.Requires(Boolean, String) 方法。

您还必须激活运行时检查。右键单击您的项目-> 属性。单击左侧菜单中的“代码合同”。检查“执行运行时联系检查”

于 2011-10-13T16:57:03.000 回答