Код пропускает контракт. Требует - PullRequest
1 голос
/ 13 октября 2011

Я пытаюсь написать этот метод, используя 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;
    }

1 Ответ

3 голосов
/ 13 октября 2011

Должно быть:

  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), если вы хотите вызвать исключение в случае сбоя предусловия.

Вы также должны активировать проверку во время выполнения. Щелкните правой кнопкой мыши по вашему проекту-> Свойства. Нажмите «Кодовые контракты» в меню слева. Проверьте «Проверка контакта во время выполнения»

...