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

时间:2014-04-23 10:13:22

标签: c# inheritance reflection windows-runtime

我有两个课程,我想使用反射。

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()之间有什么区别?

1 个答案:

答案 0 :(得分:1)

public string aa;
public string bb;

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

public string Aa
{
    get;
    set;
}

有关详情,请查看the official documentation on MSDN

对类AB进行更正后,您就可以使用:

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

对于B类中定义的属性,并且:

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

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

如果您不想将public字段更改为属性(但绝对应该),请使用GetRuntimeFields上的typeof(B)方法和DeclaredMembers typeof(B).GetTypeInfo() 1}}用于类似的行为。