2013-05-12 8 views
5

Non ho idea di cosa servano. Il documentation non è molto chiaro:Cosa sono GetField, SetField, GetProperty e SetProperty nell'enumerazione BindingFlags?

GetField Specifica che il valore del campo specificato deve essere restituito.

SetField Specifica che il valore del campo specificato deve essere impostato.

GetProperty Specifica che il valore della proprietà specificata deve essere restituito.

SetProperty Specifica che il valore della proprietà specificata deve essere impostato. Per le proprietà COM, specificare questo flag di binding equivale a specificare PutDispProperty e PutRefDispProperty.

Se li si specifica nell'enumerazione BindingFlags, cosa devono restituire? Ho pensato che ha a che fare con le proprietà ei campi di un tipo, ma questo semplice test non dice:

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 

Lo stesso insieme viene restituito per SetField, GetProperty e SetProperty.

risposta

6

Tutti questi non sono necessari per enumerare ma piuttosto per accedere correttamente alle proprietà. Ad esempio, per impostare un valore della proprietà sull'istanza data, è necessario il flag SetProperty.

Base b; 

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

ma per ottenere il valore di questa proprietà, si avrebbe bisogno di utilizzare il GetProperty: bandiera.

Base b; 

int val = (int)typeof(Base).InvokeMember("I", 
    BindingFlags.GetProperty|BindingFlags.Public|BindingFlags.Instance, 
    ..., 
    b, null); 
+0

Oh capisco; confusione nel vedere lo stesso insieme di flag usati in 'GetMembers' .. – nawfal

+0

Accetto, potrebbe essere un po 'di confusione. –