オブジェクトの をコンストラクターの引数として渡してType
いますが、型を特定のインターフェイスから継承するオブジェクトのみに制限したいと考えています。
public MyClass(Type myType);
次のように、メソッドの本体で型がインターフェイスから継承されていることを確認できることはわかっています。
if(typeof(IMyInterface).IsAssignableFrom(myType))
しかし、引数の型制約は可能ですか?
オブジェクトの をコンストラクターの引数として渡してType
いますが、型を特定のインターフェイスから継承するオブジェクトのみに制限したいと考えています。
public MyClass(Type myType);
次のように、メソッドの本体で型がインターフェイスから継承されていることを確認できることはわかっています。
if(typeof(IMyInterface).IsAssignableFrom(myType))
しかし、引数の型制約は可能ですか?
クラスをジェネリックにしないのはなぜですか?その場合、制約を指定することができ、引数のチェックを気にする必要はありません。
例えば
public class MyClass<T>
where T : IMyInterface
{
....
}
実行時に型をチェックするコードを示しているため、コンパイル時に型の制約を適用する必要があると思います。
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!");
}
}
コンストラクタではできませんが、クラス宣言ではできます。