函数重载、盖和隐藏的比较.doc

函数重载、盖和隐藏的比较.doc

ID:55677057

大小:53.00 KB

页数:7页

时间:2020-05-24

函数重载、盖和隐藏的比较.doc_第1页
函数重载、盖和隐藏的比较.doc_第2页
函数重载、盖和隐藏的比较.doc_第3页
函数重载、盖和隐藏的比较.doc_第4页
函数重载、盖和隐藏的比较.doc_第5页
资源描述:

《函数重载、盖和隐藏的比较.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、函数重载、覆盖和隐藏的比较1.覆盖和隐藏的比较(1)在C#中,默认情况下方法不是虚拟的,要使方法虚拟化必须加上virtual关键字。在派生类中可以使用override关键字覆盖其基类的虚拟方法,或者使用new关键字隐藏其基类的虚拟方法。如果既没有指定override关键字,也没有指定new关键字,编译器会发出一个警告,此时派生类中的方法也会隐藏其基类的虚拟方法。(2)在派生类中,使用override关键字来覆盖其基类定义的虚函数或抽象函数。(3)在派生类中,使用new关键字隐藏其基类定义的一般函数或虚函数,但不

2、能隐藏抽象函数。(4)当子类对象赋值给基类对象后,通过基类对象调用方法时,如果是覆盖了基类中的方法,则依然调用的是子类中的方法,因为覆盖是重新定义了基类的方法。(5)当子类对象赋值给基类对象后,通过基类对象调用方法时,如果是隐藏了基类中的方法,则会激活基类中被隐藏的方法,将调用基类中的方法,因为隐藏只是把基类的方法隐藏起来了。示例:usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceTestOverrideAndHide{/

3、/基类MyBaseclassMyBase{publicvirtualvoidMethod1(){Console.WriteLine("基类中的方法:Method1()");}publicvirtualvoidMethod2(){Console.WriteLine("基类中的方法:Method2()");}publicvirtualvoidMethod3(){Console.WriteLine("基类中的方法:Method3()");}}//派生类MyDerivedclassMyDerived:MyBase{//

4、使用override关键字覆盖其基类的虚拟方法Method1()publicoverridevoidMethod1(){Console.WriteLine("派生类中的方法:Method1()");}//使用new关键字有意隐藏其基类的虚拟方法Method2()publicnewvoidMethod2(){Console.WriteLine("派生类中的方法:Method2()");}//既不使用override关键字覆盖其基类的方法,//也不使用new关键字隐藏其基类的方法,//此时,编译器会发出一个警告,但

5、派生类中的方法仍然会隐藏其基类的方法Method3()publicvoidMethod3(){Console.WriteLine("派生类中的方法:Method3()");}}classProgram{staticvoidMain(string[]args){MyDerivedmd=newMyDerived();md.Method1();//将调用子类中的方法Method1()md.Method2();//将调用子类中的方法Method2()md.Method3();//将调用子类中的方法Method3()Co

6、nsole.WriteLine();MyBasemb=newMyDerived();mb.Method1();//将调用子类中的方法Method1()mb.Method2();//将调用基类中被隐藏的方法Method2()mb.Method3();//将调用基类中被隐藏的方法Method3()}}}运行结果:2.重载和覆盖的比较(1)静态多态,编译时的多态性,程序在编译时,根据传递的参数决定实现何种操作,主要通过函数重载来实现。(2)动态多态,运行时的多态性,直到系统运行时,才更根据情况决定实现何种操作,主要通

7、过方法覆盖来实现。示例:usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceTestOverloadAndOverride_01{//基类classAutoMobile{publicvirtualvoidDisplay()//虚函数{Console.WriteLine("这是机动车");}}//派生类classCar:AutoMobile{publicoverridevoidDisplay()//方法覆盖{Console.W

8、riteLine("这是轿车");}}//派生类classTruck:AutoMobile{publicoverridevoidDisplay()//方法覆盖{Console.WriteLine("这是卡车");}}classProgram{staticvoidMain(string[]args){Carcar=newCar();AutoMobileauto=car;auto.Disp

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

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

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