0

次の例では、文字列を介して動的にオブジェクトを作成できます。ただし、BASEクラスのパブリックメソッドを取得する方法はありません。設計時にどのジェネリックが使用されるかわからないため、objをBASEにキャストできません。実行時にそうすることについての提案は素晴らしいでしょう。

プロジェクトAにはクラスA{T、J>:BASE {T、J>
が含まれていますプロジェクトBにはクラスB {T、J>:BASE {T、J>が含まれています

プロジェクトCには、クラスBASE {T、J>
パブリック仮想制御{T、J>アイテムが含まれています

プロジェクトWindowsフォーム
cmdGo_Clickイベント

string dll = textbox1.text // ex "ProjectA.dll"
string class = textbox2.text // ex "A`2 [enuT、enuJ]"
object obj = activator.createinstancefrom(dll、class)

4

3 に答える 3

5

このコードは、BASE <int、string>のインスタンスを作成します。

Type type = typeof(BASE<,>).MakeGenericType(typeof(int), typeof(string));
object instance = Activator.CreateInstance(type);
于 2009-05-30T01:09:02.440 に答える
1

実行時に使用される型パラメーターがわからない場合は、これらの型に依存する操作も使用できないため、依存しないBASEすべての操作を含む非ジェネリック基本クラスを作成してみませんか。ジェネリックパラメーターでは、objその基本タイプをケースに入れて使用できます。

于 2009-05-30T01:01:31.130 に答える
0

コンパイラはすでにジェネリック実装のギャップを埋めているため、実行時には方程式のジェネリック部分は重要ではありません。以下の例のように、リフレクションを使用して基本クラスのメソッドを取得できると思います。これがお役に立てば幸いです。

MethodInfo[] baseMethods = obj.GetType().BaseType.GetMethods();
object retObj = baseMethods[0].Invoke(obj, new object[] {"paramVal1", 3, "paramVal3"});
于 2009-05-30T01:02:40.847 に答える