2011-08-25 84 views
3

我有一个抽象类 - 让我们将其命名为Base。这个类包含一些属性。此外,我还有另一个班,继承Base班 - 我们将其命名为ChildChild不是抽象的。在Base宣布用反射访问抽象类的属性

我想从Base类反射访问特性,并且只那些性能。

下面的代码当然是不可能的,因为我不能创建一个抽象类

Base base = new Base(); 
Type type = base.GetType(); 
PropertyInfo[] propInfos = 
    type.GetProperties(
     BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly 
    ); 

下面的代码是可能的实例,但我得到的所有属性,那些Base定义以及如Child中定义的那些。

Child child = new Child(); 
Type type = child.GetType(); 
PropertyInfo[] propInfos = 
    type.GetProperties(BindingFlags.Instance | BindingFlags.Public); 

如何通过反射获得Base类的所有属性?

回答

2

在对象上调用GetType()只是获取Type对象的方法之一。另一个即使对于abstract类也适用的是typeof()。使用BindingFlags.DeclaredOnly选项与typeof(A).GetProperties应该有效。

+0

有进一步的问题:“propInfo.SetValue(???,值null)”因为我只有类型,没有对象,我该如何设置/获取值? – Em1

+0

@ Em1我不确定我关注。如果没有任何对象,你在设置属性或从中检索属性值? – AakashM

+0

我只想知道:如果我有一个抽象类的属性,我可以提高这个属性的setter/getter(当然,我必须确定它不会碰到抽象方法;或者这是原因为什么我不能这样) – Em1

3

试试这个:

Type type = typeof(A); 

PropertyInfo[] propInfos 
    = type.GetProperties(BindingFlags.Instance 
     | BindingFlags.Public 
     | BindingFlags.DeclaredOnly);