Type.GetProperty 和只读字段之间的关系
Which relation between Type.GetProperty and a readonly field
我得到了以下 class:
public sealed class ImmutableObject {
public readonly int ic;
public ImmutableObject(int value) {
ic = value;
}
}
然后我创建了一个试图通过这个class:
获取反射信息的方法
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")
returns。当存在 readonly
时,GetProperty(
) 如何看到 public 字段?
ic
不是 属性,它是一个字段。您应该使用 GetField
或 GetFields
为其检索 FieldInfo
对象:
FieldInfo infos = typeIobj.GetField("ic");
Debug.Assert(infos!=null);
字段和属性是 .NET 中不同类型的成员。通常,属性被视为 class 接口的一部分,而字段被视为其实现的一部分。
我得到了以下 class:
public sealed class ImmutableObject {
public readonly int ic;
public ImmutableObject(int value) {
ic = value;
}
}
然后我创建了一个试图通过这个class:
获取反射信息的方法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")
returns。当存在 readonly
时,GetProperty(
) 如何看到 public 字段?
ic
不是 属性,它是一个字段。您应该使用 GetField
或 GetFields
为其检索 FieldInfo
对象:
FieldInfo infos = typeIobj.GetField("ic");
Debug.Assert(infos!=null);
字段和属性是 .NET 中不同类型的成员。通常,属性被视为 class 接口的一部分,而字段被视为其实现的一部分。