既存の大規模なプロジェクトがあり、そこに Code Contracts を統合したいとします。既存のコードは、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)' は、'A.Foo(int,int)' をオーバーライドするため、'Requires(a != null)' のカスタム引数検証を含める必要があります。このアセンブリでカスタム引数の検証を使用したくない場合は、アセンブリ モードを 'Standard Contract Requires' に変更してください。
オーバーライドされたすべてのメソッドで前提条件を繰り返したくありません! それを回避する方法はありますか?