版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、,1,第3章 方法和作用域,After completing this chapter, you will be able to: Declare and call methods. Pass information to a method. Return information from a method. Define local and class scope. Use the integrated debugger to step in and out of methods as they run.,2,3.1 创建方法,方法是一个具名的语句序列 包括方法名和方法体两部分 方法名用英语
2、描述了方法的用途 方法的主体包含方法被调用时实际执行的语句,3.1.1 声明方法,C#方法的语法格式 returnType methodName(parameterList) /这里添加方法主体语句 注意: C#不支持全局方法,所有的方法都必须在一个类的内部,否则代码无法编译 必须显式指定任何一个参数的类型和整个方法的返回值类型,不能使用var 如果不返回任何值,必须使用void,3.1.2 从方法返回数据,如果希望一个方法返回数据,必须在方法内部写一个return语句 例如: int addValues(int leftHandSide, int rightHandSide) / . ret
3、urn leftHandSide + rightHandSide; 注意: return表达式的类型必须与方法的返回值类型相同,否则无法编译 return将导致方法结束,所以最好放在方法尾部,否则return后的任何语句都不会被执行,如果不希望返回数据,可以直接写return,然后紧跟一个分号 例如: void showResult(int answer) / display the answer . return; 当然也可以省略return,因为一旦执行到方法块的尾部,方法会自动结束,下面练习P45页的例子,补充:C#中将字符串转换成为整数的几种方法对比,Int32.TryParse()
4、Int32.Parse() Convert.ToInt32() string myString=“1234”; int myInt=0; /第一种方法 myInt=Convert.ToInt32(myString); Response.Write(myInt+”); /第二种方法 myInt=Int32.Parse(myString); Response.Write(myInt+”); /第三种方法 Int32.TryParse(myString,out myInt); Response.Write(myInt+”);,8,string myString=null; int myInt=0;
5、/第一种方法 myInt=Convert.ToInt32(myString); Response.Write(myInt+”); /第二种方法 myInt=Int32.Parse(myString); Response.Write(myInt+”); /第三种方法 Int32.TryParse(myString,out myInt); Response.Write(myInt+”); 结果:ToInt32不抛出异常,而是返回0,Int32.Parse会抛出异常,Int32.TryParse不抛出异常,会返回true或false来说明解析是否成功 从性能上讲:Int32.TryParse优于In
6、t32.Parse,都优于Convert.ToInt32,9,3.2使用作用域,一个变量的作用域或范围,是指该变量能发挥作用的一个程序区域 方法也有作用域,一个标识符的作用域始于声明该标识符的那个位置,3.2.1 定义局部作用域,方法的作用域: 在方法中声明的变量都具有该方法的作用域 一旦方法结束,它们也会随之消失 它们只能由该方法内部的代码访问,称之为局部变量 class Example void firstMethod() int myVar; . void anotherMethod() myVar = 42; / error variable not in scope . ,3.2.2
7、 定义类的作用域,在类的主体中(但不能在方法中)声明的任何变量都具有那个类的作用域 C#中,使用字段表示在类中定义的变量 class Example void firstMethod() myField = 42; / ok . void anotherMethod() myField+; / ok . int myField = 0; ,注意: 在方法中,一个变量必须先声明再使用 字段可以在类中的任何位置定义(在编译器生成的IL中,字段实际还是先声明并初始化,然后再使用的),3.2.3 重载方法,如果两个标识符同名,而且是在同一个作用域中定义的,就可以说它们被重载 如果需要针对不同的数据类型
8、执行相同的操作,重载就是一项十分重要的技术 如果一个方法有多个不同的实现,而且每个实现都有不同的参数集,就可以考虑重载该方法 static void Main() Console.WriteLine(The answer is ); Console.WriteLine(42); ,15,方法信号:方法的名字、数量、类型和参数序列组成了一个方法的信号 方法信号不包括返回类型 public double Sum (double a, double b) public int Sum (double a, double b) public void Sum (double a, double b)
9、构建方法时忽略关键字params public double Sum (params double numbers) public double Sum (double numbers) 不包括形式参数的名字 public int Sum (double x, double y) public int Sum (double a, double b),16,重载方法和隐式转换,若方法调用中的参数与对应的形式参数不存在类型匹配,对于这样的每个参数,编译器都将尽力寻找从参数类型到形式参数间的隐式转换路径。 转换规则1:根据转换层次,选择与参数类型最接近者。 转换规则2: void DoIt (fl
10、oat x) void DoIt (decimal x) sbyte mySbyte = 10;DoIt (mySbyte) 只有不必经过long或ulong类型,编译器才可解决此难题,即为:float、double或decimal,17,转换规则3:当编译器正沿隐式转换路径搜索匹配的方法信号,如果找到了两个同样适合的信号,一个包含一个有符号整数类型,另一个包含一个无符号整数类型,它将选择有符号整数类型。,18,慎用方法重载,01: using System; 03: class Book 04: 05: private string title; 06: private uint numbe
11、rOfPages; 07: private double weight; 09: public void Set(string newTitle) 10: 11: title = newTitle; 12: 14: public void Set(uint newNumberOfPages) 15: 16: numberOfPages = newNumberOfPages; 17: 19: public void Set(double newWeight) 20: 21: weight = newWeight; 22: 24: public void Set(string newTitle,
12、uint newNumberOfPages, double newWeight) 25: 26: title = newTitle; 27: numberOfPages = newNumberOfPages; 28: weight = newWeight; 29: ,19,31: public void Set(string newTitle, double newWeight, uint newNumberOfPages) 32: 33: title = newTitle; 34: numberOfPages = newNumberOfPages; 35: weight = newWeigh
13、t; 36: 38: public void PrintDetails () 39: 40: Console.WriteLine(nTitle: + title); 41: Console.WriteLine(Number of pages: + numberOfPages); 42: Console.WriteLine(Weight: 0 pounds, weight); 43: 44: 46: class VirtualBookshop 47: 48: public static void Main() 49: 50: Book myBook = new Book(); 52: myBoo
14、k.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:
15、 ,20,限制重载方法的数量,让方法的名字反映他们的实际动作 public void SetTitle(string newTitle) public void SetNumberOfPages (uint newNumberOfPages) public void SetWeight (double newWeigth) 将多赋值方法的数量限制为一个 public void SetAll (string newTitle, uint newNumberOfPages, double newWeight),3.4 使用可选参数,面向对象的语言一般都会支持方法的重载功能 但是一些开发人员使用的语
16、言和技术可能并不遵守这些规范 C#和其他面向.NET Framework的语言一项关键的能力就是能够与使用其他技术开发的应用程序和组件进行互操作 Microsoft Windows使用的一项主要技术是组件对象模型 COM技术不支持重载方法,但允许方法获取可选参数 为了更好的与COM集成,C#也提供了对可选参数的支持,当参数类型差异不足以使编译器区分两个不同的实现,造成无法使用重载技术,则可选参数能提供一个简单好用的解决方案 例如: public void DoWorkWithData(int intData, float floatData, int moreIntData) . 该方法提供三
17、个参数,若你想只提供两个参数,例如: public void DoWorkWithData(int intData, float floatData) . 如下调用 int arg1 = 99; float arg2 = 100.0F; int arg3 = 101; DoWorkWithData(arg1, arg2, arg3); / Call overload with three parameters DoWorkWithData(arg1, arg2); / Call overload with two parameters,若要实现该方法的另外两个版本,她们只用于获取第一个和第二个
18、参数,那么可能草率的写出以下重载版本 public void DoWorkWithData(int intData) . public void DoWorkWithData(int moreIntData) . ,3.4.1 定义可选参数,为了指定参数是可选的,可以在定义方法时为该参数提供一个默认值 默认值是使用赋值操作符来赋予的 void optMethod(int first, double second = 0.0, string third = Hello) . 注意: 所有可选参数只能放在必须的参数之后 调用时,要提供必须的实参 可以省略对应的可选参数的实参 例如: optMeth
19、od(99, 123.45, World); / Arguments provided for all three parameters optMethod(100, 54.321); / Arguments provided for 1st two parameters only,3.4.2 传递命名参数,C#默认根据每个实参在方法调用中的位置判断它们对应于哪个形参 C#还允许按照名称指定参数,利用这个功能,就可以按照不同的顺序传递实参了 为了将一个实参作为命名参数来传递,必须输入参数名,一个冒号,然后是传递的值 例如: optMethod(first : 99, second : 123.45, third : World); optMethod(first : 100, second : 54.321); 改变顺序的传递: optMethod(third : World, second
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024ACCP临床实践指南:危重症成人红细胞输注
- 2026年卷筒纸行业分析报告及未来发展趋势报告
- 2026年石化装备行业分析报告及未来发展趋势报告
- 2026年旋壳泵行业分析报告及未来发展趋势报告
- 不明原因昏迷的分步临床与诊断策略总结2026
- 2026年橡胶粘合剂行业分析报告及未来发展趋势报告
- 2026年儿童摄影行业分析报告及未来发展趋势报告
- 2026年金融仓储行业分析报告及未来发展趋势报告
- 肠杆菌科细菌相关知识考试试卷及答案解析
- 2026年支撑座行业分析报告及未来发展趋势报告
- 2025年广西壮族自治区崇左市初二学业水平地理生物会考真题试卷(含答案)
- 2026年科目1驾驶技术模拟题库及完整答案详解
- TSG08-2026《特种设备使用管理规则》全面解读课件
- (二检)莆田市2026届高三第二次质量调研测试政治试卷(含答案)
- 毕业设计(伦文)-皮革三自由度龙门激光切割机设计
- 一项目一档案管理制度
- 2025华润建材科技校园招聘正式启动笔试历年参考题库附带答案详解
- 员工职位申请表(完整版2026年版)
- 2025新教材-译林版-七年级英语-上册-单词表
- 注塑车间安全生产培训内容
- 国家安全生产十五五规划
评论
0/150
提交评论