c#中,类的重写中,new和override的区别

在c#中有两种方法可以重写类的成员函数,分别是**new**和**override**,看书时书上并没有说明两者的区别,经过网上查资料后,总结如下:

如果使用的是override,则调用的是它实际类的函数,而用的是new的话,调用的是可以被转换为其引用类的函数

参考网址点击这里


A类 有方法 public virtual void test() 
B类继承自A类,有方法 public new void test() 
如下实例化:
A a = new B(); 
a.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();//与上面相同

深究其原因,为何两者不同,是因为原理不同。
override是覆盖,即将基类的方法直接抹去重新写,而new只是将基类方法隐藏起来,故而仍旧可以调用基类方法,当然也可用base直接访问,但事实上即便用override的话,也能在用base直接访问基类的方法,因为抹去,只是在派生类里面抹去了,并没有改变其对基类方法的访问权限。



欢迎大家加入QQ群一起交流讨论, 「吟游」程序人生——YinyouPoet

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值