2019年轻松学习的有效方法

上传人:明*** 文档编号:107208364 上传时间:2019-10-18 格式:DOC 页数:7 大小:76.66KB
返回 下载 相关 举报
2019年轻松学习的有效方法_第1页
第1页 / 共7页
2019年轻松学习的有效方法_第2页
第2页 / 共7页
2019年轻松学习的有效方法_第3页
第3页 / 共7页
2019年轻松学习的有效方法_第4页
第4页 / 共7页
2019年轻松学习的有效方法_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《2019年轻松学习的有效方法》由会员分享,可在线阅读,更多相关《2019年轻松学习的有效方法(7页珍藏版)》请在金锄头文库上搜索。

1、轻松学习的有效方法 一、静态方法和实例方法 静态方法是一个特殊的成员方法不属于类的某一个具体的实例或对象而属于类本身静态方法不对特定实例进行操作只能访问类中的静态成员访问静态方法只能使用类名而不需要创建对象也不能使用对象名类引用声明静态方法修饰符中必须有static关键字 实例方法可以使用类的任何成员调用实例方法时必须使用类的实例或对象来引用实例方法对类的某个给定的实例进行操作在实例方法类中可以使用this来访问实例调用实例方法时必须先创建一个对象 简单的说静态方法只能访问静态成员实例方法可以访问静态和实例成员之所以不允许静态方法访问实例成员变量是因为实例成员变量是属于某个对象的而静态方法在执

2、行时并不一定存在对象同样因为实例方法可以访问实例成员变量如果允许静态方法调用实例方法将间接地允许静态方法使用实例成员变量这是错误的基于同样的道理静态方法中不能使用关键字this 例一、编程使用静态方法和实例方法 usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceTextclassAintexaVar;/创建的一个为实例成员变量staticintstVar;/创建的一个静态成员变量voidtM()/实例方法exaVar

3、=1;/等价于this.exVar=1stVar=1;/等价于A.stVar=1staticvoidsM()/静态方法/exaVar=1;/错误静态方法不可以调用实例成员变量stVar=1;/等价于A.stVar=1staticvoidMain(stringargs)Atext=newA();/创建类A的对象为texttext.exaVar=1;/对象text访问实例成员变量A.stVar=1;/只能使用类访问静态成员变量/text.stVar=1;/不能使用对象text访问静态成员变量text.tM();/使用对象text访问实例成员方法/text.sM();/不能使用对象text访问静态成

4、员方法A.sM();/使用类访问静态成员方法Console.WriteLine(text.exaVar+A.stVar);Console.ReadLine(); 输出的结果为:2 二、虚方法和非虚方法 若一个实例方法的声明中含有virtual修饰符则称该方法为虚方法若其中没有virtual修饰符则称该方法为非虚方法 非虚方法的实现是一成不变的无论该方法是在声明它的类的实例上调用还是在派生类的实例上调用实现均相同与此相反虚方法的实现可以由派生类取代取代所继承的虚方法的实现的过程称为重写该方法在虚方法调用中该调用所涉及的那个实例运行时类型确定了要被调用的究竟是该方法的一种实现在非虚方法调用中相关的

5、实例的编译时类型是决定性因素 例二、使用虚方法和非虚方法在派生类中调用 usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceTextpublicclassApublicvirtualvoidab()/定义的类A的虚方法csharpviewplaincopyprint?Console.WriteLine(这是虚方法);publicvoidac()/定义的类A的非虚方法Console.WriteLine(这是非虚方法);p

6、ublicclassB:A/类B私有继承类Apublicoverridevoidab()/重写继承的ab方法Console.WriteLine(这是新的方法);publicnewvoidac()/创建一个新的方法覆盖原来的ac方法Console.WriteLine(这是另一个新的方法);classProgramstaticvoidMain(stringargs)Bb=newB();/创建类B的对象bAa=b;/将对象b赋值给类A的对象aa.ab();/调用原ab虚方法b.ab();/调用ab方法a.ac();/调用原ac非虚方法b.ac();/调用ac方法Console.ReadLine();

7、 从输出的结果中可以看出虚方法的实现是由派生类取代并且由它的方法实现而非虚方法的实现是定义的类和派生类的各自由它们的方法实现 三、虚方法和重写方法 重写方法用相同的签名重写所继承的虚方法虚方法声明用于引入新方法而重写方法声明则用于使现有的继承虚方法专用化用override声明所重写的那个方法称为已重写了的基方法 重写声明和已重写了的基方法具有相同的声明可访问性换句话说重写声明不能更改所对应的虚方法的可访问性但是如果已重写的基方法是protected并且声明它的程序集不是包含重写方法的程序集则重写方法声明的可访问性必须是protected 重写override一般用于接口的实现和继承类的方法改写

8、时应注意: (1)覆盖的方法的标志要和被覆盖的方法的标志完全匹配才能达到覆盖的效果 (2)覆盖的方法的返回值必须和被覆盖的方法的返回值一致 (3)覆盖的方法所抛出的异常必须和被覆盖的方法所抛出的异常一致或者是其子类 (4)被覆盖的方法不能为private否则在其子类中只是新定义了一个方法并没有对其进行覆盖 例三、创建一个虚方法并重写这个虚方法通过调用两个方法比较结果 usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespace

9、TextclassApublicvirtualvoida()/创建的虚方法Console.WriteLine(这是虚方法);classB:Apublicoverridevoida()Console.WriteLine(这是重写后的方法);classProgramstaticvoidMain(stringargs)Bb1=newB();/创建类B的对象b1b1.a();/调用重写后的a方法Aa1=newA();/创建类A的对象a1a1.a();/调用虚方法aAa2=b1;/将类B的对象b1赋值给类A的对象a2a2.a();/调用虚方法aConsole.ReadLine(); 输出的结果为:这是重

10、写后的方法 这是虚方法 这是重写后的方法 四、外部方法(这个方法很新奇联想到很多) 当方法声明包含extern修饰符时称该方法为外部方法外部方法是在外部实现的编程语言通常是使用C以外的语言外部方法不可以是泛型 extern修饰符通常与DllImport属性一起使用从而使外部方法可以由DLL(动态链接库)实现执行环境可以支持其他用来提供外部方法实现的机制当外部方法包含DllImport属性时该方法声明必须同时包含一个static修饰符 在使用DLLImport属性时一定要引入System.Runtime.InteropServices命名空间此命名空间是提供各种各样支持interop及平台调用服

11、务的成员 例四、通过外部方法和Dlllmport属性调用“User32.dll”实例自定义信息提示框的功能 usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Runtime.InteropServices;/必须引入的命名空间namespaceTextclassProgramDllImport(User32.dll)/调用User32.dllpublicstaticexternintMessageBox(int

12、H,stringm,stringc,inttype);/定义的外部方法staticintMain(stringargs)Console.Write(请输入信息:);stringstr=Console.ReadLine();/接受输入的信息returnMessageBox(0,str,我的信息提示框,0);/以信息提示框输出 五、分部方法 若一个方法声明中含有partial修饰符则称该方法为分部方法只能讲分部方法声明为分部类型的成员而且要遵守约束数目分部方法有着严格的限制分部方法必须在分部类或分部机构内声明它们必须是私有的不能返回值不能有输出参数因为任何针对没有被实现的分部方法的调用都会简单地被

13、忽略所以说这些限制是非常有必要的 分部方法不能作为一个明确分配的变量仅被代码生成器在处理轻量级事件的时候使用假设用户解析一个数据库或者一个XML文件然后生成了数据类结果会发现有数十个类几百个属性以及一大堆泛型和模板文件等分部方法另外一个经常被用到的地方是验证或者让属性的setter去更新另一个属性所以如果用户要使用产生的代码或者在运行时有几百个事件和千个方法调用的话(其实大多数情况下只用到了其中的一点点)就可以选择分部方法分部方法在声明和使用时要比事件容易得多如果没有用到它们它们就会消失从分部方法必须是私有的限制中 Alexander发现了该方法的不足之处即如果用户喜欢原数据驱动的应用并且已经

14、被ASP.NET的数据绑定所困扰时(因为没有其他的方法可以附上原数据)那么将来会出现丢失信息的可能 例五、创建一个类的分部方法并且在另一个部分中引用 usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceTextpublicpartialclassProgram/定义的分部类privateintsetup;/定义的字段publicintsetup/定义的方法setsetup=value;getreturnsetup;partialvoidtext(intt);/声明分部方法partialvoidtext(intt)/实现声明t+=setup;Console.Write(t);partialclassProgramstaticvoidMain(stringargs)Programpg=newProgram();/创建类对象pg.setup=100;/设置属性pg.text(50);/调用方法Console.ReadLine(); 输出的结果为:150 font face=宋体

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 工作范文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号