已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
,1,第3章方法和作用域,Aftercompletingthischapter,youwillbeableto:Declareandcallmethods.Passinformationtoamethod.Returninformationfromamethod.Definelocalandclassscope.Usetheintegrateddebuggertostepinandoutofmethodsastheyrun.,2,3.1创建方法,方法是一个具名的语句序列包括方法名和方法体两部分方法名用英语描述了方法的用途方法的主体包含方法被调用时实际执行的语句,3.1.1声明方法,C#方法的语法格式returnTypemethodName(parameterList)/这里添加方法主体语句注意:C#不支持全局方法,所有的方法都必须在一个类的内部,否则代码无法编译必须显式指定任何一个参数的类型和整个方法的返回值类型,不能使用var如果不返回任何值,必须使用void,3.1.2从方法返回数据,如果希望一个方法返回数据,必须在方法内部写一个return语句例如:intaddValues(intleftHandSide,intrightHandSide)/.returnleftHandSide+rightHandSide;注意:return表达式的类型必须与方法的返回值类型相同,否则无法编译return将导致方法结束,所以最好放在方法尾部,否则return后的任何语句都不会被执行,如果不希望返回数据,可以直接写return,然后紧跟一个分号例如:voidshowResult(intanswer)/displaytheanswer.return;当然也可以省略return,因为一旦执行到方法块的尾部,方法会自动结束,下面练习P45页的例子,补充:C#中将字符串转换成为整数的几种方法对比,Int32.TryParse()Int32.Parse()Convert.ToInt32()stringmyString=“1234”;intmyInt=0;/第一种方法myInt=Convert.ToInt32(myString);Response.Write(myInt+”);/第二种方法myInt=Int32.Parse(myString);Response.Write(myInt+”);/第三种方法Int32.TryParse(myString,outmyInt);Response.Write(myInt+”);,8,stringmyString=null;intmyInt=0;/第一种方法myInt=Convert.ToInt32(myString);Response.Write(myInt+”);/第二种方法myInt=Int32.Parse(myString);Response.Write(myInt+”);/第三种方法Int32.TryParse(myString,outmyInt);Response.Write(myInt+”);结果:ToInt32不抛出异常,而是返回0,Int32.Parse会抛出异常,Int32.TryParse不抛出异常,会返回true或false来说明解析是否成功从性能上讲:Int32.TryParse优于Int32.Parse,都优于Convert.ToInt32,9,3.2使用作用域,一个变量的作用域或范围,是指该变量能发挥作用的一个程序区域方法也有作用域,一个标识符的作用域始于声明该标识符的那个位置,3.2.1定义局部作用域,方法的作用域:在方法中声明的变量都具有该方法的作用域一旦方法结束,它们也会随之消失它们只能由该方法内部的代码访问,称之为局部变量classExamplevoidfirstMethod()intmyVar;.voidanotherMethod()myVar=42;/errorvariablenotinscope.,3.2.2定义类的作用域,在类的主体中(但不能在方法中)声明的任何变量都具有那个类的作用域C#中,使用字段表示在类中定义的变量classExamplevoidfirstMethod()myField=42;/ok.voidanotherMethod()myField+;/myField=0;,注意:在方法中,一个变量必须先声明再使用字段可以在类中的任何位置定义(在编译器生成的IL中,字段实际还是先声明并初始化,然后再使用的),3.2.3重载方法,如果两个标识符同名,而且是在同一个作用域中定义的,就可以说它们被重载如果需要针对不同的数据类型执行相同的操作,重载就是一项十分重要的技术如果一个方法有多个不同的实现,而且每个实现都有不同的参数集,就可以考虑重载该方法staticvoidMain()Console.WriteLine(Theansweris);Console.WriteLine(42);,15,方法信号:方法的名字、数量、类型和参数序列组成了一个方法的信号方法信号不包括返回类型publicdoubleSum(doublea,doubleb)publicintSum(doublea,doubleb)publicvoidSum(doublea,doubleb)构建方法时忽略关键字paramspublicdoubleSum(paramsdoublenumbers)publicdoubleSum(doublenumbers)不包括形式参数的名字publicintSum(doublex,doubley)publicintSum(doublea,doubleb),16,重载方法和隐式转换,若方法调用中的参数与对应的形式参数不存在类型匹配,对于这样的每个参数,编译器都将尽力寻找从参数类型到形式参数间的隐式转换路径。转换规则1:根据转换层次,选择与参数类型最接近者。转换规则2:voidDoIt(floatx)voidDoIt(decimalx)sbytemySbyte=10;DoIt(mySbyte)只有不必经过long或ulong类型,编译器才可解决此难题,即为:float、double或decimal,17,转换规则3:当编译器正沿隐式转换路径搜索匹配的方法信号,如果找到了两个同样适合的信号,一个包含一个有符号整数类型,另一个包含一个无符号整数类型,它将选择有符号整数类型。,18,慎用方法重载,01:usingSystem;03:classBook04:05:privatestringtitle;06:privateuintnumberOfPages;07:privatedoubleweight;09:publicvoidSet(stringnewTitle)10:11:title=newTitle;12:14:publicvoidSet(uintnewNumberOfPages)15:16:numberOfPages=newNumberOfPages;17:19:publicvoidSet(doublenewWeight)20:21:weight=newWeight;22:24:publicvoidSet(stringnewTitle,uintnewNumberOfPages,doublenewWeight)25:26:title=newTitle;27:numberOfPages=newNumberOfPages;28:weight=newWeight;29:,19,31:publicvoidSet(stringnewTitle,doublenewWeight,uintnewNumberOfPages)32:33:title=newTitle;34:numberOfPages=newNumberOfPages;35:weight=newWeight;36:38:publicvoidPrintDetails()39:40:Console.WriteLine(nTitle:+title);41:Console.WriteLine(Numberofpages:+numberOfPages);42:Console.WriteLine(Weight:0pounds,weight);43:44:46:classVirtualBookshop47:48:publicstaticvoidMain()49:50:BookmyBook=newBook();52:myBook.Set(“C#入门经典);53:myBook.Set(1.3);54:myBook.Set(300);55:myBook.PrintDetails();57:myBook.Set(“计算机网络,1.1,400);58:myBook.PrintDetails();59:myBook.Set(“数据库系统概论,2000,10.0);60:myBook.PrintDetails();62:myBook.Set(11);63:myBook.PrintDetails();65:/myBook.Set(“管理信息系统,8070,3);66:67:,20,限制重载方法的数量,让方法的名字反映他们的实际动作publicvoidSetTitle(stringnewTitle)publicvoidSetNumberOfPages(uintnewNumberOfPages)publicvoidSetWeight(doublenewWeigth)将多赋值方法的数量限制为一个publicvoidSetAll(stringnewTitle,uintnewNumberOfPages,doublenewWeight),3.4使用可选参数,面向对象的语言一般都会支持方法的重载功能但是一些开发人员使用的语言和技术可能并不遵守这些规范C#和其他面向.NETFramework的语言一项关键的能力就是能够与使用其他技术开发的应用程序和组件进行互操作MicrosoftWindows使用的一项主要技术是组件对象模型COM技术不支持重载方法,但允许方法获取可选参数为了更好的与COM集成,C#也提供了对可选参数的支持,当参数类型差异不足以使编译器区分两个不同的实现,造成无法使用重载技术,则可选参数能提供一个简单好用的解决方案例如:publicvoidDoWorkWithData(intintData,floatfloatData,intmoreIntData).该方法提供三个参数,若你想只提供两个参数,例如:publicvoidDoWorkWithData(intintData,floatfloatData).如下调用intarg1=99;floatarg2=100.0F;intarg3=101;DoWorkWithData(arg1,arg2,arg3);/CalloverloadwiththreeparametersDoWorkWithData(arg1,arg2);/Calloverloadwithtwoparameters,若要实现该方法的另外两个版本,她们只用于获取第一个和第二个参数,那么可能草率的写出以下重载版本publicvoidDoWorkWithData(intintData).publicvoidDoWorkWithData(intmoreIntData).,3.4.1定义可选参数,为了指定参数是可选的,可以在定义方法时为该参数提供一个默认值默认值是使用赋值操作符来赋予的voidoptMethod(intfirst,doublesecond=0.0,stringthird=Hello).注意:所有可选参数只能放在必须的参数之后调用时,要提供必须的实参可以省略对应的可选参数的实参例如:optMethod(99,123.45,World);/ArgumentsprovidedforallthreeparametersoptMethod(100,54.321);/Argumentsprovidedfor1sttwoparametersonly,3.4.2传递命名参数,C#默认根据每个实参在方法调用中的位置判断它们对应于哪个形参C#还允许按照名称指定参数,利用这个功能,就可以按照不同的顺序传递实参了为了将一个实参作为命名参数来传递,必须输入参数名,一个冒号,然后是传递的值例如:optMethod(first:99,second:123.45,third:World);optMethod(first:100,second:54.321);改变顺序的传递:optMethod(third:World,second:123.45,first:99);optMethod(second:54.321,first:100);,该功能还允许省略实参,例如:optMethod(first:99,third:World);还可以兼按位置和名称来指定实参,但是必须先指定好所有按照位置的实参,再指定命名的实参,例如:optMethod(99,third:World);/Firstargumentispositional,3.4.3消除可选参数和命名参数的歧义,使用可选参数和命名参数可能造成代码的歧义例如:voidoptMethod(intfirst,doubleseco
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电商网制作合同范本
- 疫情下婚宴合同范本
- 窗帘店主的合同协议
- 洗手间卫生检查表
- 签探店达人协议合同
- 电力整改后期协议书
- 电脑的内销合同范本
- 电子安装安全协议书
- 电力产权协议书范本
- 直销公司加盟协议书
- 22《鸟的天堂》课件
- 香港大埔宏福苑火灾事件全解析:灾情、救援与安全启示
- 中国的矿产资源课件 -2025-2026学年八年级地理上册湘教版
- 2025年火力电厂面试题及答案
- 2025年老人70岁以上驾考三力测试题及答案
- 政治学原理#-形考作业1-国开(ZJ)-参考资料
- 工程量清单及招标控制价编制工作方案
- 全球通VIP手机俱乐部整合推广方案
- 药学专业社会实践报告3000字
- 《地方导游基础知识》课程标准
- 中西文化鉴赏智慧树知到答案章节测试2023年郑州大学
评论
0/150
提交评论