BindingFlags枚举中的GetField, SetField, GetProperty和SetProperty是



我不知道这些是干什么用的。文档不是很清楚:

GetField指定返回指定字段的值

SetField指定设置指定字段的值。

GetProperty指定返回指定属性的值

SetProperty指定设置指定属性的值。对于COM属性,指定此绑定标志相当于指定putdisproperty和putrefdisproperty。

如果我在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);

相关内容

  • 没有找到相关文章

最新更新