GetMembersなどメンバ情報を取得するメソッドでは、特に引数を指定しない場合はパブリックなインスタンスメンバのみを返します。 非パブリックやクラスのメンバ(静的メンバ)を取得したい場合はBindingFlagsを指定する必要があります。 BindingFlagsには次のような値が用意されています。
値 | 意味 | 備考 |
---|---|---|
BindingFlags.Static | 静的メンバを対象とする | どちらか一方または両方を指定する必要があります |
BindingFlags.Instance | インスタンスメンバを対象とする | |
BindingFlags.Public | パブリックメンバを対象とする | どちらか一方または両方を指定する必要があります |
BindingFlags.NonPublic | 非パブリックメンバを対象とする | |
BindingFlags.IgnoreCase | メンバの名前を指定する際に、大文字小文字の違いを無視する | |
BindingFlags.DeclaredOnly | その型で宣言されているメンバのみを対象とする (継承されたメンバを含めない) | |
BindingFlags.FlattenHierarchy | 継承された静的メンバを対象とする | |
値 | 意味 | 備考 |
クラスの型情報から非パブリックなメンバのみを取得して表示する
using System;
using System.Reflection;
class C {
public void M1() {}
protected void M2() {}
private void M3() {}
private static void M4() {}
public string F1 = null;
private string F2 = null;
private static string F3 = null;
}
class Sample {
static void Main()
{
var t = typeof(C);
// 非パブリックなインスタンスメンバのみを取得して列挙する
foreach (var m in t.GetMembers(BindingFlags.NonPublic | BindingFlags.Instance)) {
Console.WriteLine("{0}\t{1}", m.MemberType, m);
}
}
}
実行結果
Method Void M2() Method Void M3() Method Void Finalize() Method System.Object MemberwiseClone() Field System.String F2