我有以下课程:
public sealed class ImmutableObject {
public readonly int ic;
public ImmutableObject(int value) {
ic = value;
}
}
然后我创建了一个试图通过这个类获取反射信息的方法:
public static void infosByImmutableObject() {
ImmutableObject iobj = new ImmutableObject(1);
Console.WriteLine(iobj.ic);
Type typeIobj = iobj.GetType();
PropertyInfo infos = typeIobj.GetProperty("ic");
}
我无法理解为什么,虽然ic
是public
,但infos
仍为null
,如果我尝试Type.GetProperties
,结果数组为零元素。我注意到,如果没有readonly
修饰符,GetProperties("ic")
会返回。当GetProperty(
出现时,readonly
)如何看到公共字段?
答案 0 :(得分:3)
ic
不是属性,而是一个字段。您应该使用GetField
或GetFields
为其检索FieldInfo
个对象:
FieldInfo infos = typeIobj.GetField("ic");
Debug.Assert(infos!=null);
字段和属性是.NET中不同类型的成员。通常,属性被视为类接口的一部分,而字段被视为其实现的一部分。