使用反射访问抽象类的属性

5
我有一个抽象类——让我们称之为Base。这个类包含一些属性。此外,我还有另一个继承自类Base的类——让我们称之为ChildChild不是抽象的。
我想使用反射访问来自类Base的属性,并且仅限于Base中声明的那些属性。
当然,以下代码是不可能的,因为我无法创建一个抽象类的实例。
Base base = new Base();
Type type = base.GetType();
PropertyInfo[] propInfos =
    type.GetProperties(
        BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly
    );

以下代码是可行的,但我获取了所有属性,包括在BaseChild中定义的属性。
Child child = new Child();
Type type = child.GetType();
PropertyInfo[] propInfos =
    type.GetProperties(BindingFlags.Instance | BindingFlags.Public);

如何通过反射获取类“Base”的所有属性?
2个回答

5

试试这个:

Type type = typeof(A);

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

4

在获取Type对象的方式中,调用对象的GetType()方法只是其中之一。另外一个方法是使用typeof(),即使是对于abstract类也适用。使用typeof(A).GetProperties方法并加上BindingFlags.DeclaredOnly选项应该就可以解决问题了。


还有一个问题:“propInfo.SetValue(???, value, null)”因为我只有类型,没有对象,所以如何设置/获取值? - Em1
@Em1 我不确定我理解了。如果没有对象,你是在设置属性还是获取属性值? - AakashM
我只是想知道:如果我有一个抽象类的属性,我能否调用这个属性的setter/getter方法(当然,我必须确保它不会运行到抽象方法;或者这就是我不能这样做的原因吗)。 - Em1
1
你可以毫无问题地获取 PropertyInfo - 然后一旦你实际拥有一个从 A 继承的 具体 类型的对象,你就可以调用 propInfo.SetValue 并传入你拥有的具体对象。 - AakashM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接