これは私を困惑させました。コントラクトが適用されるメソッドがインターフェイスの実装であるシナリオでコード コントラクトを使用しています。したがって、私は抽象的な ContractClassFor アプローチを使用して、契約要件を定義しています。これは、実装クラスの 1 つ (たまたまインターフェイスと同じプロジェクトにあります) では問題なく機能しますが、コントラクトは 2 番目の実装 (別のプロジェクトにある) には適用されません。両方のプロジェクトのコード コントラクト設定は同じです (標準コントラクトが必要です。完全なランタイム コントラクト チェック)。コードのシナリオは次のとおりです。
namespace First.Interfaces {
[ContractClass(typeof(ContractForIMyClass))]
public interface IMyClass {
void MyMethod(int id);
}
[ContractClassFor(typeof(IMyClass))]
public abstract class ContractForIMyClass : IMyClass
{
void MyMethod(int id) {
Contract.Requires<ArgumentException>(id != 0);
}
}
}
namespace First {
public class MyClass : IMyClass {
public void MyMethod(int id) {
//contract is applied here
}
}
}
namespace Second {
public class MyTestClass : IMyClass {
public void MyMethod(int id) {
//contract is not applied
}
}
}
どこを見ればいいのか、どんな考えでも大歓迎です。