文字列で指定されたクラスのインスタンスを作成する方法及び、文字列で指定されたメソッドを実行する方法に関しては、「型のメンバを動的に呼び出す」で詳しく説明しています。ここではさらに具体的な例をいくつか示します。
次の例では、"System.String"という文字列からStringクラスのインスタンスを作成し(パラメータとして、"'*', 10"を指定)、さらにStringクラスのReplaceメソッドを呼び出しています(パラメータとして、"'*', '+'"を指定)。
Imports System Class MainClass 'エントリポイント Public Shared Sub Main() 'System.StringのTypeを取得する Dim t As Type = Type.GetType("System.String") 'System.Stringのインスタンスを作成する 'str = New System.String("*"c, 10) 'と同等 Dim str As Object = t.InvokeMember(Nothing, _ System.Reflection.BindingFlags.CreateInstance, _ Nothing, Nothing, New Object() {"*"c, 10}) '次のようにしてインスタンスを作成することもできる 'Dim str As Object = System.Activator.CreateInstance(t, ' New Object() {"*"c, 10}) 'System.StringのReplaceメソッドを呼び出す 'result = str.Replace('*', '+') 'と同等 Dim result As Object = t.InvokeMember("Replace", _ System.Reflection.BindingFlags.InvokeMethod, _ Nothing, str, New Object() {"*"c, "+"c}) '結果を表示する Console.WriteLine(result) Console.ReadLine() End Sub End Class
using System; class MainClass { //エントリポイント public static void Main() { //System.StringのTypeを取得する Type t = Type.GetType("System.String"); //System.Stringのインスタンスを作成する //str = new System.String('*', 10); //と同等 object str = t.InvokeMember(null, System.Reflection.BindingFlags.CreateInstance, null, null, new object[] {'*', 10}); //次のようにしてインスタンスを作成することもできる //object str = System.Activator.CreateInstance(t, // new object[] {'*', 10}); //System.StringのReplaceメソッドを呼び出す //result = str.Replace('*', '+'); //と同等 object result = t.InvokeMember("Replace", System.Reflection.BindingFlags.InvokeMethod, null, str, new object[] {'*', '+'}); //結果を表示する Console.WriteLine(result); Console.ReadLine(); } }
次にWindowsアプリケーションのフォームを表示する例を示します。ここでは、アセンブリ"WindowsApplication1.exe"にForm1クラスがあるものとし、 Form1クラスのインスタンスを作成し、そのShowDialogメソッドを呼び出すことにより、Form1を表示しています。
Imports System Class MainClass 'エントリポイント Public Shared Sub Main() 'アセンブリ"WindowsApplication1.exe"を読み込む Dim asm As System.Reflection.Assembly = _ System.Reflection.Assembly.LoadFile("WindowsApplication1.exe") 'Form1のTypeを取得する Dim t As Type = asm.GetType("WindowsApplication1.Form1") 'Form1のインスタンスを作成する Dim frm As Object = t.InvokeMember(Nothing, _ System.Reflection.BindingFlags.CreateInstance, _ Nothing, Nothing, Nothing) 'Form1のShowDialogメソッドを呼び出し、フォームを表示する Dim result As Object = t.InvokeMember("ShowDialog", _ System.Reflection.BindingFlags.InvokeMethod, _ Nothing, frm, Nothing) '結果を表示する Console.WriteLine(result) Console.ReadLine() End Sub End Class
using System; class MainClass { //エントリポイント public static void Main() { //アセンブリ"WindowsApplication1.exe"を読み込む System.Reflection.Assembly asm = System.Reflection.Assembly.LoadFile("WindowsApplication1.exe"); //Form1のTypeを取得する Type t = asm.GetType("WindowsApplication1.Form1"); //Form1のインスタンスを作成する object frm = t.InvokeMember(null, System.Reflection.BindingFlags.CreateInstance, null, null, null); //Form1のShowDialogメソッドを呼び出し、フォームを表示する object result = t.InvokeMember("ShowDialog", System.Reflection.BindingFlags.InvokeMethod, null, frm, null); //結果を表示する Console.WriteLine(result); Console.ReadLine(); } }
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。