gpt4 book ai didi

.net - BindingFlags 枚举中的 GetField、SetField、GetProperty 和 SetProperty 是什么?

转载 作者:行者123 更新时间:2023-12-01 22:34:08 31 4
gpt4 key购买 nike

我不知道这些是做什么用的。 documentation不是很清楚:

GetField Specifies that the value of the specified field should be returned.

SetField Specifies that the value of the specified field should be set.

GetProperty Specifies that the value of the specified property should be returned.

SetProperty Specifies that the value of the specified property should be set. For COM properties, specifying this binding flag is equivalent to specifying PutDispProperty and 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);

关于.net - BindingFlags 枚举中的 GetField、SetField、GetProperty 和 SetProperty 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16504931/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com