我正在尝试使用c#contract编写此方法...但是在调试时,它完全忽略了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;
}
答案 0 :(得分:3)
必须是:
public Poly Add(Poly q)
{
Contract.Requires(q != null, "You need to provide a valid non-null Poly.");
CheckRep();
来自MSDN:
此方法调用必须位于方法或属性的开头,而不是任何其他代码。
此合约向客户展示;因此,它必须仅引用至少与封闭方法一样可见的成员。
您还必须激活运行时检查。右键单击您的项目 - &gt;属性。单击左侧菜单中的“代码合同”。检查“Perfrom Runtime Contact Checking”