在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));
}
}
}
看起来您已经在派生类中声明了字段而不是属性。您可以使用下面的代码来访问它们:
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;