从基类继承重写方法

时间:2013-08-05 19:38:02

标签: c# inheritance reflection override

想象一下,你有abstract base class A,还有 abstract class B继承自A +重写方法的foo()

此外,您有concrete class C继承自B

C继承了覆盖方法foo 现在考虑method foo使用反射并遍历类属性。

问题是:当C.foo()被推出时,反映将在C Class属性或B class属性上完成?
我只需要在级别C的属性上完成它。

2 个答案:

答案 0 :(得分:1)

请参阅BindingFlags.DeclaredOnly

public override void Foo() {
    PropertyInfo[] piAry = GetType().GetProperties(BindingFlags.Public | BindingFlags.DeclaredOnly);
}

答案 1 :(得分:0)

让我们假设您的班级 A 看起来与此类似。

abstract class A 
{
    public string PropertyA { get; set; }

    public abstract List<PropertyInfo> Foo();
}

现在,如果您的类 B 继承自此类,并覆盖 Foo()方法,那么它可能类似于以下定义。

abstract class B : A
{
    public string PropertyB { get; set; }

    public override List<PropertyInfo> Foo()
    {
        return GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)
                        .ToList();
    }
}

此外,您的最后一个课程,即 C ,这是唯一具体的课程,将简单地定义如下。

class C : B
{
    public string PropertyC { get; set; }
}

为了测试此解决方案,并且看到唯一返回的属性是 PropertyC ,您需要运行以下代码行。

class Program
{
    static void Main()
    {
        new C().Foo().ForEach(x => Console.WriteLine(x.Name));

        Console.Read();
    }
}