C#メモ リフレクションを使ってメソッドを文字列で呼び出してみる

C#

テキストでばばっとメソッドを呼び出せないもんかと思って、いろいろ調べてたらリフレクションって仕組みがあるんだね…知らなんだ…。

ってことで、試してみる。

手順としてはこんな感じ。

  1. Type.GetType()メソッドでクラスの型を取得する
  2. Activator.CreateInstance()メソッドでクラスの型を頼りにインスタンスを生成する
  3. Type.GetMethod()メソッドでメソッド属性を取得する
  4. MethodInfo.Invoke()メソッドでメソッド属性を頼りにメソッドを呼ぶ

で、コード。
まずは、呼び出される方(メソッドを含むクラス)はこんな感じにした。

namespace Proto
{
	class Temporary
	{
		/// <summary>
		/// コンストラクタ
		/// </summary>
		public Temporary()
		{
			System.Console.WriteLine("Temporary.Temporary()");
		}

		/// <summary>
		/// 呼び出すメソッド
		/// </summary>
		public void Function()
		{
			System.Console.WriteLine("Temporary.Function()");
		}
	}
}

次に呼び出す方。
System.Reflectionっていうnamespaceを余分に定義しとく。

using System.Reflection;

で、コードはこんな感じ。

try
{
	// クラスの型を取得する
	Type type = Type.GetType("Proto.Temporary");    // ここはnamespaceを含めたクラス名を指定する

	// クラスの型を頼りにインスタンスを生成する
	object temporary = System.Activator.CreateInstance(type);

	// メソッド属性を取得する
	MethodInfo methodinfo = type.GetMethod("Function");

	// メソッド属性を頼りにメソッドを呼ぶ
	methodinfo.Invoke(temporary, null);
}
catch(Exception ex)
{
	System.Console.WriteLine(ex.Message);
}
finally
{
	System.Console.WriteLine("finish");
}

実行してみるとこんな感じ。
TemporaryってクラスのコンストラクタとFunction()ってメソッドが呼び出された。

22183_02

んまま、メモってことで。