genericクラスの型パラメーターとしてインスタンス化されたシステムを渡します
string typeName = <read type name from somewhere>; Type myType = Type.GetType(typeName); MyGenericClass<myType> myGenericClass = new MyGenericClass<myType>();
ここで、mygenericclassは
public class MyGenericClass<T>
として定義されます。エラーでコンパイルが失敗します "'タイプまたは名前空間' mytype ''見つけることができませんでした」。これを克服するために、反射を活用できます。以下は完全に機能的な例です。
using System; using System.Reflection; public class Generic<T> { public Generic() { Console.WriteLine("T={0}", typeof(T)); } } class Test { static void Main() { string typeName = "System.String"; Type typeArgument = Type.GetType(typeName); Type genericClass = typeof(Generic<>); // MakeGenericType is badly named Type constructedClass = genericClass.MakeGenericType(typeArgument); object created = Activator.CreateInstance(constructedClass); } }
代わりに、汎用クラスが複数のタイプパラメーターを受け入れる場合、タイプ名を省略するときにコンマを指定することが重要です。たとえば、
Type genericClass = typeof(IReadOnlyDictionary<,>); Type constructedClass = genericClass.MakeGenericType(typeArgument1, typeArgument2);
以上が文字列の型パラメーターを使用して、一般的なクラスをインスタンス化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。