6

これらが何のためにあるのかわかりません。ドキュメントはあまり明確ではありません:

GetField指定されたフィールドの値が返されるように指定します。

SetField指定したフィールドの値を設定する必要があることを指定します。

GetProperty指定されたプロパティの値を返す必要があることを指定します。

SetProperty指定したプロパティの値を設定する必要があることを指定します。COM プロパティの場合、このバインド フラグを指定することは、PutDispProperty および PutRefDispProperty を指定することと同じです。

それらをBindingFlags列挙で指定すると、何を返す必要がありますか? タイプのプロパティとフィールドに関係していると思いましたが、この簡単なテストではノーと言われています:

class Base
{
    int i;
    int I { get; set; }

    void Do()
    {

    }
}

print typeof(Base).GetMembers(BindingFlags.GetField 
                              | BindingFlags.Instance 
                              | BindingFlags.NonPublic);

// Int32 get_I()
// Void set_I(Int32)
// Void Do()
// Void Finalize()
// System.Object MemberwiseClone()
// Int32 I
// Int32 i
// Int32 <I>k__BackingField

SetFieldGetPropertyおよびに対して同じセットが返されSetPropertyます。

4

1 に答える 1

9

これらはすべて、列挙するのではなく、プロパティに適切にアクセスするために必要です。たとえば、特定のインスタンスのプロパティの値を設定するには、SetProperty フラグが必要です。

 Base b;

 typeof(Base).InvokeMember( "I", 
     BindingFlags.SetProperty|BindingFlags.Public|BindingFlags.Instance,
     ...,
     b, new object[] { newvalue } );

ただし、このプロパティの値を取得するには、GetProperty: フラグを使用する必要があります。

 Base b;

 int val = (int)typeof(Base).InvokeMember( "I", 
     BindingFlags.GetProperty|BindingFlags.Public|BindingFlags.Instance,
     ...,
     b, null);
于 2013-05-12T07:01:02.183 に答える