在c#中使用反射从字符串获取属性值-继承类的问题

本文关键字:属性 继承 问题 获取 字符串 反射 | 更新日期: 2023-09-27 18:06:31

我有一个类Cinherited,它继承自类Cbase

当我尝试使用反射列出类继承的的属性时,它只返回基类Cbase的属性。

下面是演示这个问题的(稍微简化的)代码:
public class Cinherited: Cbase
{
    public int x;
    public void printProperties()
    {
        Type t = this.GetType();
        PropertyInfo[] pi = t.GetProperties();
        foreach (PropertyInfo prop in pi)
        {
            // ERROR: Next line only prints properties in base class Cbase.
            Console.Write("Prop: {0}: {1}'n", prop.Name, prop.GetValue(this,null));             
        }
    }
}

在c#中使用反射从字符串获取属性值-继承类的问题

看起来您已经在派生类中声明了字段而不是属性。您可以使用下面的代码来访问它们:

public void PrintField()
{
    Type t = this.GetType();
    FieldInfo[] fi = t.GetFields();
    foreach (FieldInfo field in fi)
    {
        Console.Write("Field: {0}: {1}'n", field.Name, prop.GetValue(this));
    }
}

可以通过调用SetValue():

设置该字段的值。
field.SetValue(this, -1);

属性应该定义为

public int x {get; set;}

但这是一个公共字段:

public int x;