[この記事は18年前に書かれました]
クラス名からインスタンスを生成するには、Typeオブジェクトを 取得し、Activator.CreateInstance()を使用します。
namespace TestSpace { // 引数なしコンストラクタのクラス(デフォルトコンストラクタ) class TestClass { } // 引数ありコンストラクタのクラス(stringとint) class TestClass2 { public TestClass2(string str, int i) { } } } // 引数なしコンストラクタのクラスの場合 Type type = Type.GetType("TestSpace.TestClass"); TestClass tc = (TestClass)Activator.CreateInstance(type); // 引数ありコンストラクタのクラス(stringとint)の場合 // 第4引数には、コンストラクタの引数に指定したい値を指定します。 Type type2 = Type.GetType("TestSpace.TestClass2"); TestClass2 tc2 = (TestClass2)Activator.CreateInstance(type2, BindingFlags.CreateInstance, null, new object[] { "test", 3 }, null); //InvokeMemberを使った同等ソース TestClass tc = (TestClass)type.InvokeMember(null, BindingFlags.CreateInstance, null, null, null); TestClass2 tc2 = (TestClass2)type2.InvokeMember(null, BindingFlags.CreateInstance, null, null, new object[] { "test", 3 });
コメント