读书人

C# new virtual的不解

发布时间: 2013-08-14 14:27:55 作者: rapoo

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删掉便知
------解决方案--------------------


输出CGUN正是多态的体现。

C类只能是override的B类中的GUN方法。因为B类中只有一个GUN方法,就是其overwrite的A类中的GUN方法。

读书人网 >C#

热点推荐