Type.GetProperty与只读字段之间的关系

时间:2015-08-12 09:47:36

标签: c# reflection

我有以下课程:

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");

}

我无法理解为什么,虽然icpublic,但infos仍为null,如果我尝试Type.GetProperties,结果数组为零元素。我注意到,如果没有readonly修饰符,GetProperties("ic")会返回。当GetProperty(出现时,readonly)如何看到公共字段?

1 个答案:

答案 0 :(得分:3)

ic不是属性,而是一个字段。您应该使用GetFieldGetFields为其检索FieldInfo个对象:

FieldInfo infos = typeIobj.GetField("ic");
Debug.Assert(infos!=null);

字段和属性是.NET中不同类型的成员。通常,属性被视为类接口的一部分,而字段被视为其实现的一部分。