C# 从基类继承重写的方法

C# 从基类继承重写的方法,c#,inheritance,reflection,overriding,C#,Inheritance,Reflection,Overriding,假设您有抽象基类A,并且 继承自命名的foo()的A+重写方法的抽象类B 此外,还有继承自B C继承了重写的方法foo。 现在考虑方法Fo< 正在使用反射并遍历类属性。 问题是:当C.foo()午餐时,将在C类属性或B类属性上进行反射? 我只需要对级别C的属性执行此操作。请参见BindingFlags。仅声明: public override void Foo() { PropertyInfo[] piAry = GetType().GetProperties(BindingFlags.

假设您有
抽象基类A
,并且 继承自命名的
foo()的
A
+重写方法的
抽象类B

此外,还有继承自
B

C
继承了重写的方法
foo

现在考虑<代码>方法Fo< <代码>正在使用反射并遍历类属性。

问题是:当
C.foo()
午餐时,将在
C类
属性或
B类
属性上进行反射?

我只需要对级别
C
的属性执行此操作。

请参见
BindingFlags。仅声明

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

请参见
BindingFlags.DeclaredOnly

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

让我们假设你的A班看起来像这样

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

    public abstract List<PropertyInfo> Foo();
}
为了测试此解决方案,并查看唯一返回的属性是PropertyC,您需要运行以下代码行

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

        Console.Read();
    }
}

让我们假设你的A班看起来像这样

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

    public abstract List<PropertyInfo> Foo();
}
为了测试此解决方案,并查看唯一返回的属性是PropertyC,您需要运行以下代码行

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

        Console.Read();
    }
}

编写代码并找出答案。只要几行代码,如果你在C上思考,在C上调用,它将在C上完成,就像在C属性上的普通调用一样。你也可以测试一下。测试应该有6行左右的长度。显示
foo
的代码会很有帮助-如果不查看代码是如何编写的,就不可能说什么类型的属性将被迭代。调用C.foo()的唯一方法是对类型为C的对象。因此,当您使用此.GetType()时,您将看到C成员。编写代码并找出答案。只要几行代码,如果你在C上思考,在C上调用,它将在C上完成,就像在C属性上的普通调用一样。你也可以测试一下。测试应该有6行左右的长度。显示
foo
的代码会很有帮助-如果不查看代码是如何编写的,就不可能说什么类型的属性将被迭代。调用C.foo()的唯一方法是对C类型的对象进行调用。因此,当您使用此.GetType()时,您将看到C成员。已经这样做了:),问题是它是否只从具体类获取属性,因为实现是在父基类上的(已经这样做了:),问题是它是否只从具体类获取属性,因为实现是在父基类上的