欢迎来到天天文库
浏览记录
ID:55677057
大小:53.00 KB
页数:7页
时间:2020-05-24
《函数重载、盖和隐藏的比较.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
此文档下载收益归作者所有