C#关键字—override 和 new 的区别

override 和 new 的区别

 

1.你从基类调用虚函数,就会不同。用override重写,会调用重写后的函数。用new重写,则仍调用基类的函数。

2.new 是“重写”的默认修饰符,若不显式的声明会默认添加new关键字,且会生成警告, 但不影响执行。

3.new和override都是重写基类方法 ,都只能重写 virtual、abstract、override修饰的function(), 不能是静态或非虚方法(因为先天逻辑上就矛盾了)

4.他们都可以实现对基类的隐藏,也都可以使用base来调用基类(直接父类) , 但是有区别:

    ①使用override来重写时, 基类必须是虚方法(virtual)声明的 , 而 new则不需要

    ②譬如:父亲和儿子都有钱包(方法), 爸爸的钱包是基类方法, 儿子的是重写方法  ; 儿子的钱包若是new进行重写的, 你调用谁的钱包就是谁的钱包(是分开独立的),若儿子钱包是override重写的,  你调用爸爸的钱包则也会调用到儿子的钱包;如是直接调用儿子钱包,不管是new或者override都不会 涉及到爸爸的钱包

;若要在儿子类当中调用爸爸的钱包 , 则需要用 base关键字来声明:“爸爸我需要钱”.

 5.override相当于子类覆盖掉父类的方法 ,除非你显式的非要调用父类方法( base.function()) ;  new相当于重新在子类当中写了一个名字一模一样的方法, 两者是不相关的

6.子类实例化会调用父类构造函数 用 :base()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值