C# new virtual的疑惑
public void Program
{
static void Main(string[] args)
{
B b = new C();
b.Gun();
Console.Read();
}
}
class A
{
public void Fun()
{
}
public virtual void Gun()
{
Console.WriteLine("AGUN");
}
}
class B:A
{
public new virtual void Gun()
{
Console.WriteLine("BGUN");
}
}
class C : B
{
public override void Gun()
{
Console.WriteLine("CGUN");
}
}
为什么屏幕输出的是CGUN呢?我以为是BGun呢。这里C类覆盖的是A类的虚方法Gun么。如果想要覆盖B类的Gun如何写呢?谢谢大家
------解决方案--------------------自找麻烦,无意义的设计。
B直接:
public virtual void GunB()
就好了,
C里就可以用Gun()和GunB()区别。
------解决方案--------------------C重写B的虚函数。 将B中virtual删掉便知
------解决方案--------------------