メソッドの結果が特定のプロパティを尊重するように依頼する方法はありますか? そのような
interface MyInterface()
{
int MyMethod(int a, int b);
// i want that my int result is less then 10
}
この種の要求を定義で強制したい。出来ますか?
残念ながら、C# でインターフェイスを使用することはできません。インターフェイスの呼び出し元にこれを強制させるか、代わりに抽象クラスを使用することができます。
abstract class MybaseClass()
{
protected virtual int MyMethodInternal(int a, int b){ //this method is not visible to the outside
// implementors override this
}
public sealed int MyMethod(int a, int b){ // users call this method
var res = MyMethodInternal(a,b);
if(res < 10)
throw new Exception("bad implementation!");
}
}
いいえ、それは不可能です。コントラクトは、そのような種類の制約を定義していません。
インターフェイスの制約はコンパイル時にチェックされます。一般に、関数の戻り値はコンパイラによって認識されません。