2

重複の可能性:
リフレクションでプライベート フィールドを見つけますか?

System.Reflection.GetFields() メソッドを使用して、クラスのフィールド名を表示しようとしています。

問題は、フィールドが「パブリック」として宣言されている場合にのみ機能することです。例えば ​​:

class Element
{
    private String id;
    private string a;
    private string b;
    private int c;
    private Dictionary<String, String> dict;

    public Element(String id)
    {
        this.id= id;
    }}

System.Reflection.GetFields() メソッドを呼び出そうとすると、機能しません (空の配列が返されます)。ただし、フィールドの可視性を「パブリック」に変更すると、機能します..

公開せずに機能させる方法を知っている人はいますか?

ありがとう

4

3 に答える 3

3

これを試して:

GetFields(BindingFlags.NonPublic | BindingFlags.Instance)

更新: GetFields をパラメーターなしで呼び出すと、次のようになります。

public FieldInfo[] GetFields()
{
   return this.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance);
}

したがって、ご覧のとおり、プライベート フィールドはデフォルトでは返されません。

ところで、msdnのGetFields()メソッドの説明は次のとおりです。

現在の Type のすべてのパブリック フィールドを返します。戻り値: 現在の Type に対して定義されているすべてのパブリック フィールドを表す FieldInfo オブジェクトの配列。- または - 現在の Type に対してパブリック フィールドが定義されていない場合は、FieldInfo 型の空の配列。

于 2012-04-27T12:23:09.040 に答える
2

これを試して

var fieldinfo = typeof(Element).GetField("field name", BindingFlags.NonPublic |
                             BindingFlags.Instance);
于 2012-04-27T12:22:56.810 に答える
1

GetFields メソッドは、パブリックフィールドのみを返します。プライベート フィールドとパブリック フィールドの両方を返したい場合は、次のようにします。

c.GetType().GetFields(BindingFlags.Instance|BindingFlags.NonPublic|BindingFlags.Public);

BindingFlags.PublicまたはBindingFlags.NonPublicと共にBindingFlags.Instance または BindingFlags.Staticを指定する必要があります。そうしないと、メンバーが返されません。

詳細については、msdn を参照してください: MSDN

于 2012-04-27T12:36:26.220 に答える