C#のは、実行時にジェネリックを持つオブジェクトを作成します。
質問
次の例では、私は、文字列を介して動的にオブジェクトを作成することができます。しかし、私は、基本クラスのパブリックメソッドで取得する方法がありません。私は設計時に使用される一般的なのか分からないので、私はBASEにOBJをキャストすることはできません。実行時にそうすることで任意のsuggestingsがいいだろう。
BASE {T、J>:
プロジェクトAは、クラスA {T、J>含ま プロジェクトBに含まれるクラスB {T、J>:BASE {T、J>
プロジェクトCはクラスBASE {T、J>
含ま
パブリック仮想制御{T、J>項目
プロジェクトWindowsフォーム
cmdGo_Clickイベント
の文字列のdll = textbox1.text // EX "ProjectA.dll"
文字列クラス= textbox2.text // EX "A`2 [enuT、enuJ]"
オブジェクトOBJ = activator.createinstancefrom(DLL、クラス)
解決
のランタイムのでは方程式のジェネリック医薬品の一部は、コンパイラがすでに一般的な実装のためのギャップに充填しているため、重要ではありません。私は、あなたは下のこの例では、私はこれが役に立てば幸いと同様に、基本クラスのメソッドで取得するためにリフレクションを使用することができると信じています。
MethodInfo[] baseMethods = obj.GetType().BaseType.GetMethods();
object retObj = baseMethods[0].Invoke(obj, new object[] {"paramVal1", 3, "paramVal3"});
他のヒント
このコードは、BASE <整数、文字列>のインスタンスを作成します
Type type = typeof(BASE<,>).MakeGenericType(typeof(int), typeof(string));
object instance = Activator.CreateInstance(type);
あなたは、実行時に使用されるタイプのパラメータを知っている、あなたはどちらかのこれらのタイプに依存するすべての操作を使用することはできませんので...ない場合BASE
に非ジェネリック基本クラスを作らない理由を、すべての操作が含まれていますそれは、一般的なパラメータに依存しない、そして、あなたはその基本型にobj
ケースとそれを使用することができます。