循环继承以获取重写的属性

本文关键字:属性 重写 获取 继承 循环 | 更新日期: 2023-09-27 18:00:19

考虑以下类

public class Super
{
    public abstract string Foo { get; }
}
public class Base : Super
{
    public override string Foo { get { return "Foo"; } }
}
public class Sub : Base
{
    public override string Foo { get { return "Bar"; } }
}

在知道Sub的类型和Foo的PropertyInfo的情况下,我如何循环通过Foo的两个声明来调用PropertInfo.GetValue(this),从而获得两个唯一字符串

循环继承以获取重写的属性

这应该做到:

public class baseType
{
    public string P { get { return "A"; }}
}
public class child : baseType
{
    new public string P { get { return "B"; }}
}
public static object GetBasePropValue(object src, string propName)
{
    return src.GetType().BaseType.GetProperty(propName).GetValue(src, null);
}
public static object GetPropValue(object src, string propName)
{
    return src.GetType().GetProperty(propName).GetValue(src, null);
}
void Main()
{
    var x = GetPropValue(new child(), "P");
    var y = GetBasePropValue(new child(), "P");
}

您应该能够使用这种方法构建一个方法来执行您想要的操作。