テキストでばばっとメソッドを呼び出せないもんかと思って、いろいろ調べてたらリフレクションって仕組みがあるんだね…知らなんだ…。
ってことで、試してみる。
手順としてはこんな感じ。
- Type.GetType()メソッドでクラスの型を取得する
- Activator.CreateInstance()メソッドでクラスの型を頼りにインスタンスを生成する
- Type.GetMethod()メソッドでメソッド属性を取得する
- 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()ってメソッドが呼び出された。
んまま、メモってことで。
