【求助】一个关于new和override的问题,请赐教,谢谢!
class A
{
public virtual void F()
{
Console.WriteLine("A");
}
}
class B : A
{
public override void F()
{
Console.WriteLine("B");
}
}
class C : B
{
(1) public override void F() { Console.WriteLine("C"); }
(2) public new void F() { Console.WriteLine("C"); }
}
class Tester
{
static void Main()
{
A a = new C();
a.F();
}
}
在class C中,如果用(1),结果就是“C”;如果用(2),结果就是“B”,为什么啊?
请问new和override到底什么区别啊,没搞定,请赐教,谢谢!
问题点数:10、回复次数:4Top
1 楼saucer(思归)回复于 2005-11-02 02:06:38 得分 10
这么说吧,virtual/override还是在同一个上下结构的,系统会根据当前的类型找到对应的方法,正宗的多态形式,而new则就是另开山头,独立门户了,重新开始一个上下结构
class C : B
{
(1) public override void F() { Console.WriteLine("C"); }
(2) public new void F() { Console.WriteLine("C"); }
}
class C : B
{
public override void F() { Console.WriteLine("C"); }
}
A a = new C();
a.F();
还是原来的上下结构,因为a的类型是C,最终调用的是C的方法
class C : B
{
public new void F() { Console.WriteLine("C"); }
}
A a = new C();
a.F();
C说我要独立门户,这个新的F跟基类的F无关,因为变量类型是基类A,你调用F(),它在自己的继承类找同一上下结构的方法F,最终找到B的Top
2 楼renchao(阿超)回复于 2005-11-02 02:16:58 得分 0
老大,每天这个时候你都在,真是太好了:)
那按你的说法,我如何调用class C中new出来的这个F()呢?
还有,想请教的是,那你的说法,这样设计出new和ovwerride,有什么优越性吗?
能否再拓开谈谈它们之间的关系?
谢谢!Top
3 楼saucer(思归)回复于 2005-11-02 03:29:38 得分 0
>>>那按你的说法,我如何调用class C中new出来的这个F()呢?
you cannot call it from a variable of type A, you need to call it from a variable of type C
>>>这样设计出new和ovwerride,有什么优越性吗?能否再拓开谈谈它们之间的关系?
it depends on how you design your class hierarchy, C# just provides the flexibility
Top
4 楼renchao(阿超)回复于 2005-11-02 03:51:05 得分 0
明白了,谢谢!Top




