什么是getfield命令,SetField,getProperty和的SetProperty中的BindingFlags枚举?

什么是getfield命令,SetField,getProperty和的SetProperty中的BindingFlags枚举?

问题描述:

我不知道这是什么意思了。该documentation不是很清楚:什么是getfield命令,SetField,getProperty和的SetProperty中的BindingFlags枚举?

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 

同一组则返回SetFieldGetPropertySetProperty

所有这些都没有必要一一列举,而是正确地访问性能。例如,要在给定实例上设置属性的值,您需要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); 
+0

哦,我看;混乱看到同一组中使用的标志'GetMembers' .. – nawfal 2013-05-12 07:05:11

+0

同意,可能是一种混乱。 – 2013-05-12 07:11:21