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