假设您有一个现有的大型项目,并且想要在其中集成代码合同。现有代码使用 if-null-then-throw 逻辑。对于给定的条件,文档建议将组装模式设置为自定义参数验证。
我有以下课程:
class A
{
protected virtual void Foo(int a, int b)
{
if (a == null)
throw new ArgumentNullException(a);
if (b == null)
throw new ArgumentNullException(b);
Contract.EndContractBlock();
}
}
class B : A
{
protected override void Foo (int a, int b)
{
// some stuff
base.Foo(a, b);
}
}
当我编译时,我收到以下警告:
警告 CC1055:方法 'B.Foo(int, int)' 应该包含对 'Requires(a != null)' 的自定义参数验证,因为它会覆盖 'A.Foo(int,int)' 这表明它确实如此。如果您不想在此程序集中使用自定义参数验证,请将程序集模式更改为“标准合同要求”。
我不想在每个被覆盖的方法上重复前提条件!有办法解决吗?