GetMembersなどメンバ情報を取得するメソッドでは、特に引数を指定しない場合はパブリックなインスタンスメンバのみを返します。 非パブリックやクラスのメンバ(静的メンバ)を取得したい場合はBindingFlagsを指定する必要があります。 BindingFlagsには次のような値が用意されています。
値 | 意味 | 備考 |
---|---|---|
BindingFlags.Static | 静的メンバを対象とする | どちらか一方または両方を指定する必要があります |
BindingFlags.Instance | インスタンスメンバを対象とする | |
BindingFlags.Public | パブリックメンバを対象とする | どちらか一方または両方を指定する必要があります |
BindingFlags.NonPublic | 非パブリックメンバを対象とする | |
BindingFlags.IgnoreCase | メンバの名前を指定する際に、大文字小文字の違いを無視する | |
BindingFlags.DeclaredOnly | その型で宣言されているメンバのみを対象とする (継承されたメンバを含めない) | |
BindingFlags.FlattenHierarchy | 継承された静的メンバを対象とする | |
値 | 意味 | 備考 |
クラスの型情報から非パブリックなメンバのみを取得して表示する
Imports System
Imports System.Reflection
Class C
Public Sub M1()
End Sub
Protected Sub M2()
End Sub
Private Sub M3()
End Sub
Private Shared Sub M4()
End Sub
Public F1 As String = Nothing
Private F2 As String = Nothing
Private Shared F3 As String = Nothing
End Class
Class Sample
Shared Sub Main()
Dim t As Type = GetType(C)
' 非パブリックなインスタンスメンバのみを取得して列挙する
For Each m As MemberInfo In t.GetMembers(BindingFlags.NonPublic Or BindingFlags.Instance)
Console.WriteLine("{0}{1}{2}", m.MemberType, vbTab, m)
Next
End Sub
End Class
実行結果
Method Void M2() Method Void M3() Method Void Finalize() Method System.Object MemberwiseClone() Field System.String F2