C#メモ リフレクションを使ってメソッドを文字列で呼び出してみる
テキストでばばっとメソッドを呼び出せないもんかと思って、いろいろ調べてたらリフレクションって仕組みがあるんだね…知らなんだ…。
ってことで、試してみる。
手順としてはこんな感じ。
- 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()ってメソッドが呼び出された。
んまま、メモってことで。
[amazonjs asin="4822298264″ locale="JP" title="C#ショートコードプログラミング 第2版 (MSDNプログラミングシリーズ)"]
ディスカッション
ピンバック & トラックバック一覧
[…] C#メモ リフレクションを使ってメソッドを文字列で呼び出してみる […]