1

想象一下,你有abstract base class A,并且 abstract class B继承自AA 命名的 + 覆盖方法foo()

另外,你有concrete class Cwhich 继承自B

Cfoo继承了被覆盖的方法。
现在考虑method foo使用反射并迭代所有类属性。

问题是:什么时候C.foo()吃午饭,反射是在C Class属性上还是在B class属性上进行?
我需要它只在级别的属性上完成C

4

2 回答 2

1

BindingFlags.DeclaredOnly

public override void Foo() {
    PropertyInfo[] piAry = GetType().GetProperties(BindingFlags.Public | BindingFlags.DeclaredOnly);
}
于 2013-08-05T20:30:04.413 回答
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();
    }
}
于 2013-08-05T21:03:43.330 回答