C#のは、実行時にジェネリックを持つオブジェクトを作成します。

StackOverflow https://stackoverflow.com/questions/928665

質問

次の例では、私は、文字列を介して動的にオブジェクトを作成することができます。しかし、私は、基本クラスのパブリックメソッドで取得する方法がありません。私は設計時に使用される一般的なのか分からないので、私は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ケースとそれを使用することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top