リフレクションを用いたインスタンス作成とメソッドの呼び出し - C#
C#でリフレクションを用いたインスタンスの作成とメソッドの呼び出しのコードを紹介します。
概要
プログラム例
リフレクションを用いて stringオブジェクトを作成し、Trim()メソッドを呼び出し、文字列から先頭の空白を除去するプログラムです。
UI
下図のUIを作成します。(ボタンは2つ配置してありますが利用するのは1つだけです。)
コード
以下のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace SimpleReflection
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
string str = " Penguin";
char[] data = str.ToCharArray();
Type t = Type.GetType("System.String");
//インスタンス作成
object obj = t.InvokeMember("VALUE", System.Reflection.BindingFlags.CreateInstance, null, null, new object[] {data});
//メソッド呼び出し作成
object result = t.InvokeMember("Trim", System.Reflection.BindingFlags.InvokeMethod, null, obj, null);
textBox1.Text += Convert.ToString(result);
}
}
}
解説
下記コードにより、入力の文字列をstring型からchar[]型に変換しています。
string str = " Penguin";
char[] data = str.ToCharArray();
下記コードにて、System.String型のTypeを取得します。
Type t = Type.GetType("System.String");
先に取得したTypeのOInvokeMamberメソッドを呼び出し、System.String型のインスタンスを作成します。インスタンスを作成する場合は第二引数に"System.Reflection.BindingFlags.CreateInstance"を与えます。コンストラクタの引数は第5引数に与えます。String型のコンストラクタに文字列の初期値を与えます。
object obj = t.InvokeMember("VALUE", System.Reflection.BindingFlags.CreateInstance,
null, null, new object[] {data});
インスタンスのTrim()メソッドを呼び出し空白を削除します。メソッドの呼び出しもInvokeMemberメソッドを用います。メソッドの呼び出しのため、第一引数に呼び出しのメソッド名を文字列で与えます。第二引数にメソッド呼び出しを意味する"System.Reflection.BindingFlags.InvokeMethod"を与えます。呼び出し元のインスタンスは第4引数に与えます。Trimメソッドには引数を渡さないため第5引数はnullにします。結果はobject型で戻ります。
object result = t.InvokeMember("Trim", System.Reflection.BindingFlags.InvokeMethod,
null, obj, null);
戻り値をstring型に変換してテキストボックスに表示します。string型のインスタンスに与えた初期文字列 " Penguin" がTrim()メソッドの呼び出しにより空白が削除され"Penguin"となります。
textBox1.Text += Convert.ToString(result);
実行結果
プログラムを実行し、ボタンをクリックすると下図の結果"Penguin"がテキストボックスに表示されます。Trim()メソッドによって、与えた文字列 " Penguin" から先頭の空白が取り除かれていることが確認できます。
このページのキーワード
- C# リフレクション
- C# リフレクション インスタンス作成
- C# リフレクション メソッド呼び出し
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用