Net面向对象程序设计3方法与作用域201020112.ppt_第1页
Net面向对象程序设计3方法与作用域201020112.ppt_第2页
Net面向对象程序设计3方法与作用域201020112.ppt_第3页
Net面向对象程序设计3方法与作用域201020112.ppt_第4页
Net面向对象程序设计3方法与作用域201020112.ppt_第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定义局部作用域 方法的作用域 在方法中声明的变量都具有该方法的作用域一旦方法结束 它们也会随之消失它们只能由该方法内部的代码访问 称之为局部变量classExample voidfirstMethod intmyVar voidanotherMethod myVar 42 error variablenotinscope 3 2 2定义类的作用域 在类的主体中 但不能在方法中 声明的任何变量都具有那个类的作用域C 中 使用字段表示在类中定义的变量classExample voidfirstMethod myField 42 ok voidanotherMethod myField ok intmyField 0 注意 在方法中 一个变量必须先声明再使用字段可以在类中的任何位置定义 在编译器生成的IL中 字段实际还是先声明并初始化 然后再使用的 3 2 3重载方法 如果两个标识符同名 而且是在同一个作用域中定义的 就可以说它们被重载如果需要针对不同的数据类型执行相同的操作 重载就是一项十分重要的技术如果一个方法有多个不同的实现 而且每个实现都有不同的参数集 就可以考虑重载该方法staticvoidMain Console WriteLine Theansweris Console WriteLine 42 15 方法信号 方法的名字 数量 类型和参数序列组成了一个方法的信号方法信号不包括返回类型publicdoubleSum doublea doubleb publicintSum doublea doubleb publicvoidSum doublea doubleb 构建方法时忽略关键字paramspublicdoubleSum paramsdouble numbers publicdoubleSum double numbers 不包括形式参数的名字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 0 pounds 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 doubl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论