浅析C#new和override的区别.doc

浅析C#new和override的区别.doc

ID:51169623

大小:173.50 KB

页数:5页

时间:2020-03-09

浅析C#new和override的区别.doc_第1页
浅析C#new和override的区别.doc_第2页
浅析C#new和override的区别.doc_第3页
浅析C#new和override的区别.doc_第4页
浅析C#new和override的区别.doc_第5页
资源描述:

《浅析C#new和override的区别.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、浅析C#new和override的区别C#中new和override是继承中经常用到的两个关键字,但是往往有时候容易把这两个关键字的作用搞混淆。newC#new关键字表示隐藏,是指加上new关键字的属性或函数将对本类和继承类隐藏基类的同名属性或函数publicclassA{publicvirtualvoidMethod(){Console.WriteLine("ThisMethodinClassA!");}}publicclassB:A{publicnewvoidMethod(){Console

2、.WriteLine("ThisMethodinClassB!");}}对于上面这个例子来说,假如运行Aa=newB();a.Method();会输出ThisMethodinClassA!,这是因为classB继承于classA,现在B中的Method函数隐藏A中的Method,所以从B(包括继承于B的子类)的角度来看类中的Method就是B.Method,A的Method不可见,但是如果从A的角度来看B,A只认识类B中继承于类A的Method函数,对于B类中的Method它不可见,所以Aa=n

3、ewB();a.Method();相当于是调用了类B中继承于A的Method函数overrideC#中override关键字表示重写,对于加上override关键字的属性或函数将完全覆盖基类的同名虚属性或虚函数,使基类的虚属性和虚函数在整个继承链中都不可见(在子类中用base关键字调用除外)。publicclassA{publicvirtualvoidMethod(){Console.WriteLine("ThisMethodinClassA!");}}publicclassB:A{public

4、overridevoidMethod(){Console.WriteLine("ThisMethodinClassB!");}}对于上面这个例子来说,假如运行Aa=newB();a.Method();会输出ThisMethodinClassB!,因为classB的Method函数完全覆盖基类的同名虚函数Method,使整个继承链中看见的Method函数都是B中的Method,所以就算是以A角度来看B,A看到的Method函数也是B中的Method,因为A中的Method完全被B的覆盖了但是如果要

5、在B的对象中调用A的Method函数还是有办法,就是使用base关键字,比如publicclassA{publicvirtualvoidMethod(){Console.WriteLine("ThisMethodinClassA!");}}publicclassB:A{publicoverridevoidMethod(){base.Method();}}Aa=newB();a.Method();会输出ThisMethodinClassA!,base.Method();表示调用类B中继承于基类A的

6、Methodnew、override与interface接口在相互继承的时候也会隐藏基接口的同名属性或函数,但是对于接口来说很特殊,隐藏对于基接口来说是不起作用的,接口内部的属性和函数都只是声明,它们都指向实现接口的类中的同名实现函数,通过接口调用接口的属性和函数的时候都会去调用实现类中从上到下最先可见的同名函数和同名属性:publicinterfaceIA{voidMethod();}publicinterfaceIB:IA{newvoidMethod();}publicclassIClass

7、:IB{publicvoidMethod(){Console.WriteLine("ThisMethodinClassIClass!");}}publicclassISubClass:IClass{publicnewvoidMethod(){Console.WriteLine("ThisMethodinClassISubClass!");}}IAia=newISubClass();ia.Method();输出ThisMethodinClassIClass!因为对于ia来说在继承链中最先见到的同名

8、实现函数是类IClass的Method函数把上面的例子稍作修改:publicinterfaceIA{voidMethod();}publicinterfaceIB:IA{newvoidMethod();}publicclassIClass:IB{publicvirtualvoidMethod(){Console.WriteLine("ThisMethodinClassIClass!");}}publicclassISubClass:IClass{publicoverridevoidMethod(

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。