[この記事は19年前に書かれました]
クラス名からインスタンスを生成するには、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 });


コメント