1

オブジェクトの をコンストラクターの引数として渡してTypeいますが、型を特定のインターフェイスから継承するオブジェクトのみに制限したいと考えています。

public MyClass(Type myType);

次のように、メソッドの本体で型がインターフェイスから継承されていることを確認できることはわかっています。

if(typeof(IMyInterface).IsAssignableFrom(myType))

しかし、引数の型制約は可能ですか?

4

2 に答える 2

1

クラスをジェネリックにしないのはなぜですか?その場合、制約を指定することができ、引数のチェックを気にする必要はありません。

例えば

public class MyClass<T>
    where T : IMyInterface
{
    ....
}
于 2013-07-17T19:32:39.353 に答える
0

実行時に型をチェックするコードを示しているため、コンパイル時に型の制約を適用する必要があると思います。

public class MyClass<T> where T : IMyInterface {
    public MyClass(T myArg) {
        Type myType = typeof(T);
        Type argType = myArg.GetType();
        Debug.Assert(myType == argType, "types must be the same!");
    }
}

コンストラクタではできませんが、クラス宣言ではできます。

于 2013-07-17T19:37:32.853 に答える