【发布时间】:2013-10-24 23:03:56
【问题描述】:
我有一个简单的 POCO 类,例如
class C {
[MyAtrib]
public int i {get; set;}
[MyAtrib]
public int i2;
}
当我打电话时:
GetType().GetFields(
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
在那个类(实例)上,对于那些自动生成 getter/setter(即上面的 int i)的成员,我无法获得 FieldInfo。
实际上,我正在尝试读取那些自定义属性 (MyAtrib),但对于那些具有 {get; set;} 的属性却无法读取。
这是为什么呢?我希望同时获得i 和它的(私有)支持字段,因为i 是公开的。
我可以通过反射到达i 的MyAtrib 吗?
【问题讨论】:
-
那些有getter和setter的不是字段;它们是属性。
-
你肯定得到了支持字段,使用 BindingFlags.NonPublic 就足够了。它有一个难以形容的名字,
<i>k__BackingField。该属性不应用于支持字段,它存在于属性中。需要调用 GetProperty() 来检索它。
标签: c# reflection custom-attributes backing-field