クラス名からインスタンスを生成

クラス名からインスタンスを生成するには、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 });

0 件のコメント :

コメントを投稿