【C#图解教程】 第六章 方法(上)

这篇具有很好参考价值的文章主要介绍了【C#图解教程】 第六章 方法(上)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

方法的结构

方法是一块具有名称的代码,在类和结构中都经常用到

【C#图解教程】 第六章 方法(上)

局部变量

局部变量位于方法内部,在方法中声明时产生,在方法执行结束时结束

【C#图解教程】 第六章 方法(上)

类型推断与var关键字

某些情况下,在声明的开始部分包含类型名是多余的,因为可以通过初始化看出是什么类型,所以这时可以统一使用var关键字来声明:

【C#图解教程】 第六章 方法(上)

需要注意的是var只能用于局部变量,并且需要附带初始化

嵌套块中的局部变量

这里与C/C++不同的是,C#中即使是嵌套的不同的块也不可以使用相同的局部变量名,嵌套块中局部变量的生存期如下图:

【C#图解教程】 第六章 方法(上)

局部常量

【C#图解教程】 第六章 方法(上)

需要注意的是,局部常量必须在声明时初始化,且之后值不变。这里的const不是修饰符(如ref、out),而是类型声明的一部分,其他都跟局部变量一致

返回值

通常方法被调用后可以返回一个值,要返回值时需要为方法设置一个返回类型,如果为空则设置为void,返回类型可以是自定义类型。

【C#图解教程】 第六章 方法(上)

void方法通常不需要返回语句,但是使用return;提前退出方法块也是常用的方法。

【C#图解教程】 第六章 方法(上)

局部函数

也叫做本地函数,意思是可以在函数体内部定义函数,这样的好处是为了简化函数逻辑,因为有事函数本身就是另一个函数的部分逻辑,这部分目前用的比较少。

【C#图解教程】 第六章 方法(上)

参数

本节比较重要,且较复杂

形参

形参是局部变量,但是是在方法的参数列表中声明,而不是在块中

实参

在方法调用时用于初始化形参的参数就是实参,实参应与形参类型匹配或可发生隐式转换

【C#图解教程】 第六章 方法(上)

值参数

值参数指的是一类函数参数类型,这种类型的特点是直接在栈中复制实参作为形参,为形参分配内存。

当实参为值类型时,因为值参数会拷贝一个副本来执行方法,所以并不会影响值类型的实参;

当实参为引用类型时,值参数会拷贝引用类型的副本,但是此时副本作为地址显然指向同一块堆中的位置,所以此时对形参执行的方法会影响实参的值。

【C#图解教程】 第六章 方法(上)

由上面这段代码可见,值类型不受方法影响,而引用类型发生了变化。

注意:这里值类型与值参数要区别开,前者是相对于内存而言的数据项类型,值类型表示类型本身包含其值;而值参数这里表示一种函数的参数类型。

【C#图解教程】 第六章 方法(上)

引用参数

使用引用参数时,必须加上ref作为修饰符,且参数应为变量而不是实际值

使用时容易出错的一点是需要在声明和调用时都加上ref

【C#图解教程】 第六章 方法(上)

与值参数在栈中为形参分配内存不同,引用参数不会为形参分配内存,而是将形参作为实参的别名

【C#图解教程】 第六章 方法(上)

【C#图解教程】 第六章 方法(上)

ref返回和ref局部变量

ref局部变量可以为变量创建别名,即使是值类型的变量,这样对原变量和别名的改动都会同步。

声明方式是:

【C#图解教程】 第六章 方法(上)

实际上ref局部变量经常与ref返回一起使用。

ref返回使方法返回变量的引用而不是变量值,声明方法为:

【C#图解教程】 第六章 方法(上)

【C#图解教程】 第六章 方法(上)

ref返回的使用有很多限制:

【C#图解教程】 第六章 方法(上)

引用类型作为值参数

引用类型作为值参数时,前面提到了,会复制一份实参的地址,后面也是对实参执行方法,但是如果创建一个新对象并赋值给形参,就会将形参与实参之间的联系转换为形参与新对象之间的联系,并且这个新对象是局部的,在方法执行完毕时就会释放,所以创建新对象并赋值给形参之后就会切断形参与实参的联系。

【C#图解教程】 第六章 方法(上)

【C#图解教程】 第六章 方法(上)

在方法开始时与前面一致,形参实参都指向堆中同一对象,但当方法分配新对象给形参后就会切断与实参的联系,方法调用之后,形参和新对象都会消失。

引用类型作为引用参数

引用类型作为引用参数时,根据前面的内容,引用参数的形参是实参的别名,所以也是指向堆中同一对象,但当方法分配新对象给形参后,因为形参是实参的别名,实参也会指向新对象,此时形参实参都指向新对象,当方法调用完成后形参消失,实参指向新对象。

【C#图解教程】 第六章 方法(上)

【C#图解教程】 第六章 方法(上)文章来源地址https://www.toymoban.com/news/detail-467935.html

到了这里,关于【C#图解教程】 第六章 方法(上)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法与数据结构 第六章 图(详解)

    目录 一、判断题 二、选择题  在开始之前,先为大家推荐四篇介绍该章四个主要算法的的文章,供大家参考。 Dijkstra算法求最短路径:Dijkstra算法原理_平凡的L同学的博客-CSDN博客_dijiesitela Floyd算法求最短路径:Floyd算法求最短路径 Prim算法求最小生成树:Prim算法求最小生成树

    2024年02月09日
    浏览(46)
  • 数据结构与算法分析 第六章 图 作业讲解

     参考教材: 《数据结构(C语言版 第2版)》 严蔚敏,李冬梅,吴伟民编著,人民邮电出版社,2022年版。 截图未标明出处均为原创或取自《数据结构(C语言版 第2版)》~   本文对应的作业题讲解视频:   数据结构与算法分析作业讲解视频合集 https://www.bilibili.com/video/BV1N

    2024年02月03日
    浏览(45)
  • 【RabbitMQ教程】第六章 —— RabbitMQ - 延迟队列

                                                                       💧 【 R a b b i t M Q 教 程 】 第 六 章 — — R a b b i t M Q − 延 迟 队 列 color{#FF1493}{【RabbitMQ教程】第六章 —— RabbitMQ - 延迟队列} 【 R a b b i t M Q 教 程 】 第 六 章 — — R a

    2024年02月09日
    浏览(38)
  • python笔记:第六章函数&方法

    由系统提供,直接拿来用或是导入模块后使用 函数是结构化编程的核心 使用 def 来定义函数 为函数添加文档字符串 如果不自定义返回值,则无返回值 return 用明确的变量组来接受函数输出值,便于后期查看(序列解包),不用元组 标明函数的返回值 注意:这

    2024年02月13日
    浏览(45)
  • 王道计算机考研 数据结构C语言复现-第六章-队列

     这篇文章收录了王道考研课程中涉及的数据结构的所有代码。此外,本博客可能会添加一些额外的代码(不仅限于王道考研),因为408考试中会频繁考察一些冷门的知识点,所以这篇博客会涵盖所有相关的代码。这也是我数据结构的第一轮复习,希望能与大家共同进步。由

    2024年01月21日
    浏览(40)
  • Odoo17入门教程第六章 UI

    现在我们已经创建了新模型及其 相应的,是时候了 与用户界面交互。 在本章结束时,我们将创建几个菜单以访问默认列表 和窗体视图。 参考 :与此主题相关的文档可以在数据文件中找到。 在第五章:安全性-简介中,我们通过 CSV 文件添加了数据。CSV 当要加载的数据具有

    2024年04月23日
    浏览(46)
  • 第六章 块为结构建模 P1|系统建模语言SysML实用指南学习

    仅供个人学习记录 块是SysML结构中的模块单元,用于定义一类系统、部件、部件互连,或者是流经系统的项,也用于定义外部实体、概念实体或其他逻辑抽象 块定义图用于定义块以及块之间的相互关系,如层级关系,也用于规定块的实例,包括配置和数据值。内部块图用于根

    2024年02月05日
    浏览(43)
  • verilog数字系统设计教程(夏闻宇)|第一章-第六章

    早听闻此书大名,虽然有些verilog的编程经验,今天来系统的学习下verilog,完善知识体系,提升编程能力。本文章只当自己做笔记使用,记录自己没掌握的重难点,和大家一起学习。 目录 第一章  第二章 verilog语法 第三章 模块的结构、数据类型、变量和基本运算符号 1.常量

    2024年03月18日
    浏览(44)
  • 《计算机网络:自顶向下方法》学习笔记——第六章:链路层

    两种截然不同类型的链路层信道 广播信道 :这种信道用于连接有线局域网、卫星网和混合光纤同轴电缆接入网中的多台主机。 点对点通信链路 :这在诸如长距离链路连接的两台路由器之间,或用户办公室计算机与它们所连接的邻近以太网交换机之间等场合经常能够发现。

    2024年02月03日
    浏览(39)
  • 《软件工程教程》(第2版) 主编:吴迪 马宏茹 丁万宁 第六章课后习题参考答案

    (1)为了提高测试的效率,应该( D )。         A.随机地选取测试数据        B.取一切可能的输入数据作为测试数据        C.在完成编码以后制定软件的测试计划        D.选择发现错误的可能性大的数据作为测试数据 (2)软件测试的目的是( B )。        A.评价

    2024年02月03日
    浏览(93)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包