【问题标题】:Access to properties of abstract class with reflection使用反射访问抽象类的属性
【发布时间】:2011-11-03 17:15:58
【问题描述】:

我有一个抽象类——我们把它命名为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 类的所有属性?

【问题讨论】:

    标签: c# reflection


    【解决方案1】:

    试试这个:

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

    【讨论】:

      【解决方案2】:

      在对象上调用GetType() 只是获取Type 对象的方法之一。另一个甚至适用于abstract 类的是typeof()。将BindingFlags.DeclaredOnly 选项与typeof(A).GetProperties 一起使用应该可以解决问题。

      【讨论】:

      • 还有一个问题:'propInfo.SetValue(???, value, null)' 因为我只有类型,没有对象,如何设置/获取值?
      • @Em1 我不确定我是否关注。如果没有对象,你是在什么上设置属性,或者从哪里检索属性值?
      • 我只想知道:如果我有一个抽象类的属性,我可以提高这个属性的setter/getter吗(当然我必须确定,它不会遇到抽象类方法;或者这就是我不能这样做的原因)
      • 您可以毫无问题地获得PropertyInfo - 然后一旦您真正拥有一个继承自A具体 类型的对象,您就可以调用propInfo.SetValue传入你拥有的具体对象。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-11
      • 2023-03-03
      • 2013-09-18
      • 2020-08-31
      • 2012-02-06
      • 2016-07-07
      相关资源
      最近更新 更多