MethodInfoやPropertyInfoなどのMemberInfo派生クラスを取得し、以下のメソッドを使うことでもメンバの呼び出しを行うことができます。 MethodInfoやPropertyInfoの取得にはGetMethodやGetPropertyなどのメソッドを使用します。

メンバの呼び出しを行うメソッド
メソッド 動作
MethodInfo.Invoke 指定した引数と一致するメソッドを呼び出して戻り値を取得する
PropertyInfo.SetValue プロパティに値を設定する
PropertyInfo.GetValue プロパティの値を取得する
FieldInfo.SetValue フィールドに値を設定する
FieldInfo.GetValue フィールドの値を取得する
ConstructorInfo.Invoke 指定した引数と一致するコンストラクタを呼び出してインスタンスを作成する

コンストラクタ呼び出しの場合を除き、Type.InvokeMemberメソッドによるメンバ呼び出しの場合と同様に操作の対象となるインスタンスを引数objで指定します。 静的メンバ(static/Shared)の場合はインスタンスを指定する代わりにnull/Nothingを指定します。

また、メソッドおよびコンストラクタの呼び出し時に渡す引数は、object型の配列に格納して指定します。 フィールド・プロパティに設定する値をobject型の配列に格納して指定するInvokeMemberメソッドとは異なり、PropertyInfo.SetValueメソッド・FieldInfo.SetValueメソッドでは設定する値を直接引数として指定することができます。

MemberInfoを使ってメンバの呼び出しを行う
Imports System
Imports System.Reflection

Class C
  Public Function M(ByVal s As String) As String
    Return s.ToUpper()
  End Function

  Public F As Double = 0.0
End Class

Class Sample
  Shared Sub Main()
    Dim t As Type = GetType(C)

    Dim inst As Object = Activator.CreateInstance(t)

    ' メソッドMのMethodInfoを取得する
    Dim m As MethodInfo = t.GetMethod("M")

    ' メソッドを呼び出す
    Dim ret As Object = m.Invoke(inst, New Object() {"Hello, world!"})

    Console.WriteLine(ret) ' メソッドの戻り値を表示する

    ' フィールドFのFieldInfoを取得する
    Dim f As FieldInfo = t.GetField("F")

    ' フィールドに値3.14を設定する
    f.SetValue(inst, 3.14)

    ' フィールドの値を取得する
    Console.WriteLine("F = {0}", f.GetValue(inst))
  End Sub
End Class
実行結果
HELLO, WORLD!
F = 3.14

これらのメソッドでは、メンバの呼び出しを行うインスタンスや設定する値はすべてobject型の引数に渡します。 この際、構造体など値型インスタンスのフィールド・プロパティを設定する際には問題が生じる場合があります。

この問題と回避方法に関してはリフレクションを使って構造体フィールドに値を設定する(FieldInfo.SetValue)で解説しているので、合わせてご覧ください。