深入浅出NET中关键字---base和this.doc
上传人:sy****28 上传时间:2024-09-13 格式:DOC 页数:18 大小:107KB 金币:14 举报 版权申诉
预览加载中,请您耐心等待几秒...

深入浅出NET中关键字---base和this.doc

深入浅出NET中关键字---base和this.doc

预览

免费试读已结束,剩余 8 页请下载文档后查看

14 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

深入浅出.NET中关键字--base和this虽然访问关键字不是很难理解的话题,我们还是有可以深入讨论的地方来理清思路。还是老办法,我的问题先列出来,您是否做好了准备。1.是否可以在静态方法中使用base和this,为什么?不能,因为base和this只能在对象中使用,而静态方法不属于对象属于类所有,所以不能使用BASE和THIS.2.base常用于哪些方面?this常用于哪些方面?3.可以base访问基类的一切成员吗?基类是非抽象类和访问权限非PRIVATE时可以访问。4.如果有三层或者更多继承,那么最下级派生类的base指向那一层呢?例如.NET体系中,如果以base访问,则应该是直接父类实例呢,还是最高层类实例呢?5.以base和this应用于构造函数时,继承类对象实例化的执行顺序如何?2.基本概念base和this在C#中被归于访问关键字,顾名思义,就是用于实现继承机制的访问操作,来满足对对象成员的访问,从而为多态机制提供更加灵活的处理方式。2.1base关键字其用于在派生类中实现对基类公有或者受保护成员的访问,但是只局限在构造函数、实例方法和实例属性访问器中,MSDN中小结的具体功能包括:•调用基类上已被其他方法重写的方法。•指定创建派生类实例时应调用的基类构造函数。2.2this关键字其用于引用类的当前实例,也包括继承而来的方法,通常可以隐藏this,MSDN中的小结功能主要包括:•限定被相似的名称隐藏的成员•将对象作为参数传递到其他方法•声明索引器3.深入浅出3.1示例为上下面以一个小示例来综合的说明,base和this在访问操作中的应用,从而对其有个概要了解,更详细的规则和深入我们接着阐述。本示例没有完全的设计概念,主要用来阐述base和this关键字的使用要点和难点阐述,具体的如下:usingSystem;namespaceAnytao.net.My_Must_net{publicclassAction{publicstaticvoidToRun(Vehiclevehicle){Console.WriteLine("{0}isrunning.",vehicle.ToString());}}publicclassVehicle{privatestringname;privateintspeed;privatestring[]array=newstring[10];publicVehicle(){}//限定被相似的名称隐藏的成员publicVehicle(stringname,intspeed){this.name=name;this.speed=speed;}publicvirtualvoidShowResult(){Console.WriteLine("Thetopspeedof{0}is{1}.",name,speed);}publicvoidRun(){//传递当前实例参数Action.ToRun(this);}//声明索引器,必须为this,这样就可以像数组一样来索引对象publicstringthis[intparam]{get{returnarray[param];}set{array[param]=value;}}}publicclassCar:Vehicle{//派生类和基类通信,以base实现,基类首先被调用//指定创建派生类实例时应调用的基类构造函数publicCar():base("Car",200){}publicCar(stringname,intspeed):this(){}publicoverridevoidShowResult(){//调用基类上已被其他方法重写的方法base.ShowResult();Console.WriteLine("It'sacar'sresult.");}}publicclassAudi:Car{publicAudi():base("Audi",300){}publicAudi(stringname,intspeed):this(){}publicoverridevoidShowResult(){//由三层继承可以看出,base只能继承其直接基类成员base.ShowResult();base.Run();Console.WriteLine("It'saudi'sresult.");}}publicclassBaseThisTester{publicstaticvoidMain(string[]arg