我有两个课程,我想使用反射。
public Class A
{
public string aa { get; set; }
public string bb { get; set; }
...
}
public Class B: A {}
当我尝试获取B对象的属性时,我没有属性;
TypeInfo b = typeof(B).GetTypeInfo();
IEnumerable<PropertyInfo> pList = b.DeclaredProperties;
pList始终为null,可能是因为我使用了“DeclaredProperties”而不是GetProproperties(),但是在winRt中我无法使用它。
我已阅读此解决方案How to get properties of a class in WinRT但我无法使用var properties = this.GetType().GetTypeInfo().GetRuntimeProperties();
,因为无法识别GetRuntimeProperties()
找到解决方案,仍然存在疑虑
要获取继承类的属性,我需要以这种方式获取RuntimeProperties
IEnumerable<PropertyInfo> pList = typeof(B).GetRuntimeProperties();
忽略PropertyInfo,如果我尝试获取A对象的属性
,它也会起作用当我正在阅读A对象的属性时,getType().GetTypeInfo()
和getType().GetRuntimeProperties()
之间有什么区别?
答案 0 :(得分:1)
public string aa;
public string bb;
这些不是属性。属性定义如下:
public string Aa
{
get;
set;
}
有关详情,请查看the official documentation on MSDN。
对类A
和B
进行更正后,您就可以使用:
var classProperties = typeof(B).GetTypeInfo().DeclaredProperties;
对于B类中定义的属性,并且:
var allProperties = typeof(B).GetRuntimeProperties();
对于在其继承树中的类和中定义的属性;即在运行时实际可访问的属性(因此是方法的名称)。
如果您不想将public
字段更改为属性(但绝对应该),请使用GetRuntimeFields
上的typeof(B)
方法和DeclaredMembers
typeof(B).GetTypeInfo()
1}}用于类似的行为。