2

C# に次のクラスがあるとします。

public class B : A
{
    public Int32 B_ID;
    public String B_Value;

    public Int32 getID()
    {
        return B_ID;
    }

    public void setID(Int32 value)
    {
        B_ID = value;
    }
}

リフレクションに基づいて、getID() (および/または) setID() メソッドで使用されるフィールドの名前を取得できますか? ([B_ID] の場合) 永続化フレームワークをコーディングしていますが、上記の両方の方法で囲まれたテーブルのキー名を識別すると便利です。

RuntimeMethodInfo の ReturnParameter プロパティには、これに役立つ Name というプロパティがあるようですが、null になっています。

その RuntimeMethodInfo オブジェクトを取得するために、この BindingFlags 列挙型を使用して B クラスのインスタンスのメンバーを取得しています。

  • BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly

このフィールド名を取得するにはどうすればよいですか? この動作は、プロパティと同じである必要があります。

前もって感謝します

4

1 に答える 1

2

フィールド名は実装されたコードの一部であり、リフレクションはそれを取得する方法がわからないため、それは不可能だと思います。永続的なフレームワークは通常、一種のマッピングを使用してそのような情報を提供します。たとえば、xml ファイルを使用したり、フィールドに属性を使用して、次のようにテーブルのキーまたは列として導入したりできます。

[Table(name="MyTable")]    
public class B : A
    {

[Key(column_name="id")]    
public Int32 B_ID;
        public String B_Value;

        public Int32 getID()
        {
            return B_ID;
        }

        public void setID(Int32 value)
        {
            B_ID = value;
        }
    }
于 2012-02-19T18:59:58.620 に答える