Vas*_*sya 9 .net c# inheritance grandchild
我测试了这样的代码:
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"
}
}
Run Code Online (Sandbox Code Playgroud)
并尝试从C类方法调用A类(祖父母的方法).但它不起作用.请告诉我一种调用祖父母虚拟方法的方法.
Jon*_*eet 14
你不能 - 因为它会违反封装.如果B类想要强制执行某种不变(或其他),Test那么如果C类可以绕过它就会非常严峻.
如果你发现自己想要这个,你应该质疑你的设计 - 或许你的继承关系中至少有一个是不合适的?(我个人试图从组合而不是继承开始,但这是一个单独的讨论.)
一种选择是在B中定义一个新方法,如下所示
class B : A
{
public B() { }
public override void Test()
{
Console.WriteLine("I am B!");
base.Test();
}
protected void TestFromA()
{
base.Test()
}
}
Run Code Online (Sandbox Code Playgroud)
并TestFromA()在C中使用