欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#中new和override的区别个人总结

程序员文章站 2024-01-21 09:36:04
问题: a类 有方法 public virtual void test() b类继承自a类,有方法 public new void test()  如下...

问题:

a类 有方法 public virtual void test()
b类继承自a类,有方法 public new void test() 
如下实例化:

a a = new b(); 
a.test();

会调用哪个类中的test方法,最好能详细给我解释一下好吗?先谢谢了!

回答:

如果你用override,则无论调用的是a类还是b类中的test(),系统都会找到它实质类的test();
如果是用的new,则可以通过类型转换调用到基类的test();

下面是override的情况:

a a = new a(); 
b b = new b();
a a1=new b();
a.test();//调用a中test();
b.test();//调用b中test();
a1.test();//调用b中test();系统会自动识别a1是b的实例

((a)b).test();//与上面相同

下面是new的情况:

a a = new a(); 
b b = new b();
a a1=new b();
a.test();//调用a中test();
b.test();//调用b中test();
a1.test();//调用a中test();
((a)b).test();//与上面相同