9

我测试了这样的代码:

class A
{
    public A() { }

    public virtual void Test ()
    {
        Console.WriteLine("I am A!");
    }
}

class B : A
{
    public B() { }

    public override void Test()
    {
        Console.WriteLine("I am B!");
        base.Test();
    }
}

class C : B
{
    public C() { }

    public override void Test()
    {
        Console.WriteLine("I am C!");
        base.base.test(); //I want to display here "I am A"
    }
}

并试图从 A 类(祖父母的方法)的 C 方法测试中调用。但它不起作用。请告诉我一种调用祖父母虚拟方法的方法。

4

2 回答 2

14

你不能 - 因为它会违反封装。如果 B 类想要对其强制执行某种不变量(或其他),Test那么如果 C 类可以绕过它,那将是非常严峻的。

如果你发现自己想要这个,你应该质疑你的设计——也许至少你的一个继承关系是不合适的?(我个人从一开始就倾向于支持组合而不是继承,但这是一个单独的讨论。)

于 2011-10-04T13:50:24.913 回答
5

一种选择是在 B 中定义一个新方法,如下所示

class B : A
{
    public B() { }

    public override void Test()
    {
        Console.WriteLine("I am B!");
        base.Test();
    }

    protected void TestFromA()
    {
        base.Test()
    }
}

TestFromA()在 C 中使用

于 2011-10-04T13:52:50.120 回答