C# 从入门到精通 学习笔记2 第3章 方法和作用域

本章内容

  1. 声明和调用方法
  2. 向方法传递信息
  3. 从方法返回信息
  4. 定义局部作用域和类作用域
  5. 使用集成调试器来逐语句和逐过程地调试方法

3.1 创建方法

方法(method)是一个具名的语句序列。方法名应该是一个有意义的标识符,方法主体包含方法被调用时实际执行的语句。

3.1.1 声明方法

returnType methodName(parameterList)
{//这里添加方法主题语句
}
  1. returnType(返回类型)是一个类型名,它指定了方法返回的数据是什么类型。如果要写一个不返回值的方法,必须用关键字 void来取代 returnType。
  2. methodName(方法名)是调用方法时使用的名称。
  3. parameterList(参数列表)是可选的,它描述了允许传给方法的数据的类型和名称。在圆括号内填写参数列表时,要像声明变量时那样,先写参数的类型名,再写参数名。如果方法有两个或者更多的参数,必须用逗号来分隔它们。
  4. 方法主体语句是调用方法时要执行的代码。它们必须放在起始大括号({)与结束大括号(})之间。
重要提示:C,C++和 Microsoft Visual Basic 程序员请注意,C#不支持全局方法。所有方法都必须在一个类的内部,否则代码无法编译。
提示:必须显式指定任何一个参数的类型和整个方法的返回类型。不能使用 var 关键字。
重要提示:Visual Basic 程序员请注意,C#不允许使用不同的关键字来区分一个要返回值的方法(VB 中称为函数)和一个不返回值的方法(VB 中称为过程、子例程或者子程序)。在 C#中,要么显式指定一个返回类型,要么指定 void。

3.1.2 从方法返回数据

如果希望一个方法返回数据(换言之,它的返回类型不是 void),必须在方法内部写一个 return语句。
return 应放在方法尾部,因为它会导致方法结束。return 后的任何语句都不会被执行(如果非要在 return 语句之后放其他语句,编译器会发出警告)。
假如不希望方法返回数据(换言之,返回类型为 void),可以利用 return 语句的一个变体立即从方法中退出。为此,请先写关键字 return,然后紧跟一个分号。
提示:方法的最小长度没有限制。假如一个方法有助于避免重复,并使你的程序更可读,就应该毫不犹豫地使用方法——不管这个方法有多小。同样地,方法的最大长度也没有限制。但是,应该保持方法代码的精炼,足够完成一项工作就可以了。如果一个方法的大小超过了一个屏幕,就应该考虑把它分解成一些更小的方法,以增强可读性。

3.1.3 调用方法

result=methodName(argumentList)
  1. methodName(方法名)必须与要调用的方法的名称完全一致。记住,C#语言是区分大小写的。
  2. result =子句是可选的。如果指定,result 变量将包含方法的返回值。如果返回类型是 void(即不返回任何值),就必须在语句中省略 result =子句。如果不指定 result =子句,而且方法返回一个值,那么方法虽然会运行,但返回值会被丢弃。
  3. argumentList(实参列表)提供了将由方法接收的数据。必须为每个参数(形参)提供一个参数值(实参),而且每个实参都必须兼容于它对应的形参的类型。如果方法有两个或者更多的参数,那么在提供实参时,必须用逗号来分隔不同的实参。
重要提示:每个方法调用中都必须包含一对圆括号,即使调用的是无参方法。

3.2 使用作用域

我们知道可以在方法内部创建变量。这种变量的有效期(生存期)起始于它的定义位置,结束于方法结束的时候。在同一个方法内,后续的语句都可以使用这些变量(变量在创建之后才能使用)。方法执行完毕后,这些变量也会随之消失。
一个变量的作用域或范围(scope)是指该变量能发挥作用的一个程序区域。除了变量有作用域,方法也有作用域。一个标识符(不管它代表变量还是方法)的作用域始于声明该标识符的那个位置。

3.2.1 定义局部作用域

界定方法主体的{与}定义了一个作用域。
局部变量(local variable),因为它们局限于声明它们的那个方法,不在其他任何方法的范围中。只能由那个方法内部的代码访问。一旦方法结束,它们也会随之消失。

3.2.2  定义类的作用域

界定类主体的{和}也定义了一个作用域。在类的主体中(但不能在一个方法中)声明的任何变量都具有那个类的作用域。在 C#术语中,开发者使用字段(field)一词来描述由一个类定义的变量。和局部变量相反,可以使用字段在不同的方法之间共享信息。
在方法中,一个变量必须先声明再使用。但字段稍有不同,一个字段可以在类的任何位置定义。在编译器生成的 IL 代码中,字段实际还是先声明并初始化,然后再使用的。

3.2.3 重载方法

如果两个标识符同名,而且是在同一个作用域中声明的,就可以说它们被重载(overloaded)了。
如果需要针对不同的数据类型执行相同的操作,重载就是一项十分有用的技术。如果一个方法有多个不同的实现,而且每个实现都有不同的参数集,就可以考虑重载该方法。这样一来,每个版本都有相同的方法名,但有不同的参数数量或者/以及不同的参数类型。利用这个功能,在调用一个方法时,可以提供一个以逗号分隔的实参列表,而编译器将根据这些实参的数量和类型来选择一个匹配的重载版本。但要注意,虽然可以重载一个方法的参数,但不能重载方法的返回类型。也就是说,不能声明只是返回类型有区别的两个方法。
注意:
Console.Write 方法不会在消息之后输出一个换行符。
ReadLine 方法是与 WriteLine 配对的一个方法;它读取用户的键盘输入,并在用户按 Enter 键时结束读取。用户输入的文本会作一个 String 值返回。

程序测试

提示:
按 F11 键的作用等同于单击调试工具栏中的逐语句按钮。
按 F10 键的作用等同于单击调试工具栏中的逐过程按钮。
按 Shift + F11 组合键的作用等同于单击调试工具栏中的跳出按钮。

3.4 使用可选参数和命名参数

C#和其他面向.NET Framework 的语言的一项关键的能力就是能够与使用其他技术开发的应用程序和组件进行互操作。Microsoft Windows 使用的一项主要技术是组件对象模型(Component Object Model,COM)。COM 不支持重载方法;相反,它允许方法获取可选参数。为了方便在 C#解决方案中集成 COM 库和组件,C#现在也提供了对可选参数的支持。
可选参数在其他情况下也很有用。有的时候,参数类型差异不足以使编译器区分两个不同的实现,造成无法使用重载技术。在这个时候,可选参数能提供一个简单、好用的解决方案。

3.4.1 定义可选参数

为了指定一个参数是可选的,可以在定义方法时为该参数提供一个默认值。所有可选的参数都只能放在必须的参数之后。
    void optMethod(int first, double second = 0.0, string third = "Hello"){ ...}

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"); //第一个实参是按位置来定的

3.4.3 消除可选参数和命名参数的歧义

例如:
    void optMethod(int first, double second = 0.0, string third = "Hello"){ ...}void optMethod(int first, double second = 1.0, string third = "Goodbye", int fourth = 100){ ...}
如果试图调用 optMethod 方法,同时忽略和它的一个或多个可选参数对应的实参,就可能出现问题:
optMethod(1,2.5,"World");
调用最匹配的那个版本。所以,最后选择的是获取 3 个参数的版本。
再看这一例:
optMethod(1,2.5);
optMethod 的两个版本都不能完全匹配提供的实参列表。编译器认为这是一个存在歧义的方法调用,所以不允许编译应用程序。

C# 从入门到精通 学习笔记2 第3章 方法和作用域相关推荐

  1. python web开发入门_python大佬整理的python web开发从入门到精通学习笔记

    原标题:python大佬整理的python web开发从入门到精通学习笔记 Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通 ...

  2. 《Shopify从入门到精通》笔记(4~6章)

    目录 第4章 Shopify 后台功能 4.1 Shopify后台概览 第5章 Shopify设置 5.1 Shopify的基础设置 5.2 其他设置 第6章 网站优化 6.1 网站设计 6.2 关键 ...

  3. MySQL8从入门到精通学习笔记

    MySQL8学习笔记 MySQL8从入门到精通 1.数据库操作 1.1 创建数据库 1.2 查看数据库 1.3 删除数据库 1.4 选择数据库 2.数据表操作 2.1 创建数据表 2.2 查看表 2. ...

  4. 基金投资好简单,从入门到精通 -学习笔记day1

    本系列笔记是我通过在喜马拉雅平台,跟随"威尼斯摆渡人"出品的"基金投资好简单,入门到精通"系列时学习记录的笔记,如果大家对基金投资感兴趣,并不知道怎么入手的话, ...

  5. mysql数据库应用_MySQL数据库应用 从入门到精通 学习笔记

    以下内容是学习<MySQL数据库应用 从入门到精通>过程中总结的一些内容提要,供以后自己复现使用. 一:数据库 查看所有数据库:SHOW DATABASES 创建数据库:CREATE DA ...

  6. 黑马程序员新版Linux零基础快速入门到精通——学习笔记

    01初识Linux 1.1.操作系统概述 1.1.1.硬件和软件 我们所熟知的计算机是由硬件和软件组成的. 硬件: 计算机系统中由电子.机械和光电元件等组成的各种物理装置的总称. ​ (看的见.摸得着 ...

  7. Kafka从入门到精通学习笔记

    前言: 新公司消息队列用选用卡夫卡,刚好之前没有用这个消息队列过借此机会学习一波.发现大公司都喜欢用这款消息队列. 消息队列中间件的使用并不复杂,但消息队列的选型一直是个难点.比如: 不同业务场景下该 ...

  8. 基金投资好简单,从入门到精通 -学习笔记day3

    第九集:国际的主流指数介绍 美国: 标普500指数:全名叫做标准普尔500指数,它是由标准普尔公司所编制并发布的一个指数,它基本上囊括了在美国市场上面市值最大.流动性最好的500家公司,应该说代表了美 ...

  9. 尚硅谷Vue2.0+Vue3.0全套教程丨vuejs从入门到精通 学习笔记

    已经将课程刷完,但是后来发现网上有很多总结特别好的网站,现在汇总如下 https://www.yuque.com/cessstudy/kak11d 大家好,老师的笔记拿到了,给大家快速拿到 阿里云-- ...

  10. 【数据可视化】Matplotlib 入门到精通学习笔记(超详细)

    数据可视化是什么 如果将文本数据与图表数据相比较,人类的思维模式更适合于理解后者,原因在于图表数据更加直观且形象化,它对于人类视觉的冲击更强,这种使用图表来表示数据的方法被叫做数据可视化. 当使用图表 ...

最新文章

  1. mysql关于时间的面试题,mysql时间设置默认值MySQL常见面试题
  2. Google收购安全分析软件厂商Zynamics
  3. VB.Net to C Sharp Converter有用吗?
  4. Multiple Dispatch
  5. 十点总结,为何 Linux 如此深得人心
  6. Linux命令 umask,chmod使用
  7. Leetcode-整数反转 C++
  8. 第一章练习题三级菜单
  9. Qt UDP组播的应用
  10. html多行文本框_HTML的七大标签怎么运用?
  11. c c++函数资源释放时避免goto的方法
  12. 数据质量评价体系(附思维导图)
  13. 量化投资学习——股票数据接口的汇总和整理
  14. 模电实验——实验三 集成运算放大器的基本应用
  15. 复制粘贴到word文档中的表格超出页面该怎么办
  16. “汇新杯”青年创客专项赛介绍
  17. 利用腾讯云轻量服务器快速搭建网站CDN
  18. 2013中国Linux内核开发者大会亮点汇总
  19. Renderdoc调试总结
  20. 201809-4 再卖菜 ccf

热门文章

  1. 如何突破大众点评接口风控?
  2. 安卓修改软件安装时间_WPS 2019软件安装教程
  3. 蛋白质分子动力学模拟
  4. sscom打开时提示error reading comcombobox1
  5. 一个项目需求文档怎么写?
  6. 深职院计算机专业宿舍,深圳职业技术学院宿舍怎么样 住宿条件好不好
  7. 每日N题—数据结构题集
  8. 银联无卡涉及关键词整理
  9. vb精简版12M大小含msinet.ocx控件
  10. 深入浅出通信原理 陈爱军——读书笔记1