WinRt中的反射正在获取继承类的参数

本文关键字:继承 获取 参数 反射 WinRt | 更新日期: 2023-09-27 17:59:26

我有两个类,我想使用反射。

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总是空的,可能是因为我使用了";DeclaredProperties";而不是GetProproperties(),但在winRt中我不能使用它。

我已经阅读了这个解决方案如何在WinRT中获取类的属性,但我不能使用var properties = this.GetType().GetTypeInfo().GetRuntimeProperties();,因为GetRuntimeProperties()无法识别

解决方案找到,疑虑依然存在

要获得继承类的属性,我需要以这种方式获得RuntimeProperties

IEnumerable<PropertyInfo> pList = typeof(B).GetRuntimeProperties();

忽略PropertyInfo,如果我尝试获取A对象的属性,它也会起作用

当我读A对象的属性时,getType().GetTypeInfo()getType().GetRuntimeProperties()之间有什么区别?

WinRt中的反射正在获取继承类的参数

public string aa;
public string bb;

这些不是属性。属性定义如下:

public string Aa
{
    get;
    set;
}

有关详细信息,请查阅MSDN上的官方文档。

一旦您对类AB进行了更正,您就可以使用:

var classProperties = typeof(B).GetTypeInfo().DeclaredProperties;

对于B类中定义的属性,以及:

var allProperties = typeof(B).GetRuntimeProperties();

对于在类的继承树中定义的属性;即在运行时实际可访问的属性(因此是方法的名称)。

如果您不想将public字段更改为属性(但确实应该更改),请对typeof(B)使用GetRuntimeFields方法,对typeof(B).GetTypeInfo()使用DeclaredMembers方法以获得类似的行为。