object obj = new Customer();
Type Ty = obj.GetType();
Validator<Ty> cusValidator = valFactory.CreateValidator<Ty>();
ここでエラーを取得
出来ますか?
はい、そうです。ただし、コンパイル時の型チェックではありません。実行時の型Ty
は、有効なコンパイル時の型引数ではありません。MakeGenericType
コンパイル時チェックの安全性なしでメソッドを使用して、リフレクションで実行できます。
object obj = new Customer();
Type ty = obj.GetType();
MethodInfo validatorFactory = valFactory.GetType()
.GetMethod("CreateValidator")
.MakeGenericType(ty);
var cusValidator = validatorFactory.Invoke(valFactory, null);
ただし、次のようなものは入力できません。またはValidator<ty>
を使用する必要があります。タイプがオブジェクトになっていることに注意してください。var
dynamic
// true:
cusValidator.GetType() == typeof(object)
非ジェネリック Validator インターフェイスを導入してcusValidator
、すべての (などの) クラスの基本クラスを挿入しCustomer
て検証するメソッドの呼び出しを許可することができます。にキャストすることはできませんValidator<ty>
。