class A { public virtual void mm(); } class B : A { public override void mm(); } class C : A { public new void mm(); }class main { public void m1() { A aa = new B(); aa.mm();//调用B.mm() A aa = new C(); ss.mm();//调用C.mm() B bb = new B(); (A)bb.mm();//调用A.mm(); C cc = new C(); (A)cc.mm();//调用C.mm(); } }
我来说说override 与 new 的区别: override 与 new 都是重写基类的方法,但两者还是有区别 当用override 重写时;用强制父类调用此方法时,是调用子类的方法, 而用new重写时;用强制父类调用此方法时,是调用父类的方法;public class cls1 { public virtual void fun() { } }public class cls11 { public override void fun() { } }public class cls12 { public new void fun() { } }则 cls11 c1=new cls11; cls12 c2=new cls12; ((cls1)c1).fun();//调用cls11.fun() ((cls1)c2).fun();//调用cls1.fun()
{
public virtual void mm();
}
class B : A
{
public override void mm();
}
class C : A
{
public new void mm();
}class main
{
public void m1()
{
A aa = new B();
aa.mm();//调用B.mm()
A aa = new C();
ss.mm();//调用C.mm()
B bb = new B();
(A)bb.mm();//调用A.mm();
C cc = new C();
(A)cc.mm();//调用C.mm();
}
}
override 与 new 都是重写基类的方法,但两者还是有区别
当用override 重写时;用强制父类调用此方法时,是调用子类的方法,
而用new重写时;用强制父类调用此方法时,是调用父类的方法;public class cls1
{
public virtual void fun()
{
}
}public class cls11
{
public override void fun()
{
}
}public class cls12
{
public new void fun()
{
}
}则
cls11 c1=new cls11;
cls12 c2=new cls12;
((cls1)c1).fun();//调用cls11.fun()
((cls1)c2).fun();//调用cls1.fun()
好像不完整。
如果是用new重写,则用那个父类强制,则就调用这个强制父类的方法。
如果是用override重写,则不管用那个父类强制,都是调用子类(最出声明的类)的方法.
new 就是说 “我是新人”,和老家伙不是一回事,就相当于重新起了一个名字一样,大家井水不犯河水。呵呵。