1

これは私を困惑させました。コントラクトが適用されるメソッドがインターフェイスの実装であるシナリオでコード コントラクトを使用しています。したがって、私は抽象的な 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
        }
    }
}

どこを見ればいいのか、どんな考えでも大歓迎です。

4

1 に答える 1