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

news2024/11/27 2:28:55

方法的结构

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nucsih1U-1685615722602)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/14c4d18e-6485-4e4d-9866-ccf03b27f54c/Untitled.png)]

局部变量

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1jQZQs4w-1685615722602)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d7efb625-2368-45ef-9c1e-77784502ead6/Untitled.png)]

类型推断与var关键字

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uWhx0Emx-1685615722603)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8b25e61a-af52-4553-afba-76a7207d5aa7/Untitled.png)]

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

嵌套块中的局部变量

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IJPnWU5n-1685615722603)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/82a9517b-f763-47e0-a1a5-44acbb7c4902/Untitled.png)]

局部常量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mSDYy4fU-1685615722604)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/12d8f7cc-c517-4b6b-8117-3d6fd054a806/Untitled.png)]

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

返回值

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jwZ2WYad-1685615722604)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/fd3bed61-15f0-4582-820d-f62d502c9354/Untitled.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XRK6taDj-1685615722604)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2f3d07d6-9803-43c3-a144-87d7838bdc96/Untitled.png)]

局部函数

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5TraLTrI-1685615722605)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d6366373-8cbd-4cf0-a154-ad37a5e28805/Untitled.png)]

参数

本节比较重要,且较复杂

形参

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

实参

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xjV0SvyX-1685615722605)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/975c7eee-c703-476a-9420-02bee5aa7dca/Untitled.png)]

值参数

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

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

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

在这里插入图片描述

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cpGFS2zu-1685615722606)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/0980d010-35a4-4e37-8af5-4adcae23b59c/Untitled.png)]

引用参数

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-opeBkTe2-1685615722606)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a74c7a90-7643-4ec3-847e-924be7ba0883/Untitled.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-29y2lJ3z-1685615722606)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b82e5873-651c-4ec0-937d-45be1aa8877a/Untitled.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vo0Xuxo6-1685615722607)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/9a7ca803-3030-4520-b080-d97cf37d7174/Untitled.png)]

ref返回和ref局部变量

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

声明方式是:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0JShLDL4-1685615722607)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/e4661c57-9f8e-4222-8f91-acc60b51b521/Untitled.png)]

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p3uTO8OR-1685615722608)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6da759df-ec3b-4f47-8763-a04845c81793/Untitled.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UyzhJ0Jw-1685615722608)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/ff51cb9e-eff8-46de-8778-b9391c032b46/Untitled.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5oqdvVVE-1685615722608)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/af5c5756-85af-47e3-abcc-5bd709a3db00/Untitled.png)]

引用类型作为值参数

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PCV7fI8H-1685615722608)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/58e8031e-02e8-49c8-ac86-6389a8313b7e/Untitled.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NbQI1asx-1685615722608)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d63e5d95-3865-42f4-a1ae-6cd6bd18d56d/Untitled.png)]

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

引用类型作为引用参数

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jFdZnQ8U-1685615722609)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f5fcbd7c-1f99-4746-bf31-a7ef4d28a5a6/Untitled.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FbesbVpd-1685615722609)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d65e5971-3fea-488b-aed2-c1d8bd784eed/Untitled.png)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/598406.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python-python判断语句:布尔类型和比较运算符、if语句的基本格式、if else语句、if el if else语句、判断语句的嵌套、实战案例

版本说明 当前版本号[20230601]。 版本修改说明20230601初版 知识总览图 目录 文章目录 版本说明知识总览图目录Python判断语句布尔类型和比较运算符布尔类型布尔类型的定义 比较运算符 if语句的基本格式if判断语句if语句的注意点 if else 语句语句注意点 if elif else语句注…

7min 到 40s:SpringBoot 优化居然可以玩出这么多花样!

0 背景 公司 SpringBoot 项目在日常开发过程中发现服务启动过程异常缓慢,常常需要6-7分钟才能暴露端口,严重降低开发效率。通过 SpringBoot 的 SpringApplicationRunListener 、BeanPostProcessor 原理和源码调试等手段排查发现,在 Bean 扫描…

“灵巧小工具”一个将图片处理成打印纸尺寸的丰富功能完全免费无水印的图片处理工具

今天推荐一款微信小程序“灵巧小工具”,经常有打印图片需求的用户赶紧收藏了。 可以先扫码体验一番: 下面介绍一下它的主要功能: 1.照片(1寸、2寸、5寸、6寸) 支持1寸,2寸照片自动排版,生成相纸…

JavaSE】Java基础语法(四十):UDP通信程序

文章目录 1. UDP发送数据2. UDP接收数据【应用】3. UDP通信程序练习【应用】4. UDP三种通讯方式 1. UDP发送数据 Java中的UDP通信 UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两个 Socket只是发送,接收数据的对…

IPv6 6to4隧道配置和验证实验

IPv6 6to4隧道配置和验证实验 【实验目的】 熟悉IPv6 6to4隧道的概念。 掌握IPv6和IPv4共存的实现方法。 掌握IPv6 6to4地址编址规则。 掌握IPv6 6to4隧道的配置。 验证配置。 【实验拓扑】 设备参数如下表所示。 设备 接口 IP地址 子网掩码 默认网关 R1 S0/0 19…

cuda编程学习——CUDA共享内存性能优化(九)

前言 参考资料: 高升博客 《CUDA C编程权威指南》 以及 CUDA官方文档 CUDA编程:基础与实践 樊哲勇 文章所有代码可在我的GitHub获得,后续会慢慢更新 文章、讲解视频同步更新公众《AI知识物语》,B站:出门吃三碗饭 …

绝不可错过!R语言与ggplot2实现SCI论文数据分析神器

一、介绍 1.1 R语言和ggplot2 语言是一种强大的数据分析和统计建模工具,具有广泛的应用领域。 ggplot2是基于R语言的数据可视化工具,具有强大的绘图功能和灵活性。 1.2 数据分析中的重要性 R语言和ggplot2在数据分析中具有广泛的应用,能够帮助…

有些香港云主机为啥更容易遭遇停机风险?

​对于搭建过外贸网站的站长们来说,在面对香港云主机的选择时,往往遇到且出现较为频繁的两个词便是:免费香港云主机和付费香港云主机。其中,一些所谓的免费香港云主机,尤其是长久免费使用,恐怕用户们就要承…

ES6中函数新增了哪些扩展?

参数 🍕🍕🍕ES6允许为函数的参数设置默认值 函数的形参是默认声明的,不能使用let或const再次声明 function foo(x5){let x 1;//errconst x 2;//err }参数默认值可以与解构赋值的默认值结合起来使用 function foo({x,y 5}){co…

华为OD机试真题B卷 Java 实现【分奖金】,附详细解题思路

一、题目描述 公司老板做了一笔大生意,想要给每位员工分配一些奖金,想通过游戏的方式来决定每个人分多少钱。按照员工的工号顺序,每个人随机抽取一个数字。按照工号的顺序往后排列,遇到第一个数字比自己数字大的,那么…

OpenGL超级宝典第八章学习笔记:基元处理之曲面细分

前言 本篇在讲什么 OpenGL蓝宝书第八章学习笔记之曲面细分 本篇适合什么 适合初学OpenGL的小白 本篇需要什么 对C语法有简单认知 对OpenGL有简单认知 最好是有OpenGL超级宝典蓝宝书 依赖Visual Studio编辑器 本篇的特色 具有全流程的图文教学 重实践,轻…

CI/CD:如何使用 GitLab 执行 SpringBoot 前后端分离项目的持续集成与持续交付(持续部署)?

一、GitLab Runner 安装 官网各系统 & 各方式安装说明:https://docs.gitlab.com/runner/install/ 本文基于阿里云 CentOS 安装 GitLab Runner (Linux Shell 方式,非 Docker 方式) 1.1 GitLab Runner 介绍 GitLab Runner 是…

GPT面试知识点

0.GPT的模型结构 GPT是一个基于Transformer的生成式预训练模型。使用Transformer中的解码器部分 它由一系列的模块化的Transformer Blocks组成。每一个Block包含一个多头自注意力机制(Multi-Head Self-Attention mechanism)以及一个位置前馈网络(position-wise feedforward n…

Redis - 原理篇

✨作者:猫十二懿 ❤️‍🔥账号:CSDN 、掘金 、个人博客 、Github、语雀 🎉公众号:猫十二懿 Redis(原理篇) 一、数据结构 1.1 动态字符串SDS 我们都知道Redis中保存的Key是字符串,value往往是字符串或者字…

Spring Boot如何实现分布式锁的自动释放

Spring Boot如何实现分布式锁的自动释放 在分布式系统中,为了保证数据的一致性和可靠性,常常需要使用分布式锁。在实际开发中,我们可以使用 Redis、Zookeeper 等分布式系统来实现分布式锁。本文将介绍如何使用 Spring Boot 来实现分布式锁的…

Android Input子系统 - kernel

目录 前言 数据结构 输入子系统流程 前言 上一节有展示Android Input子系统的架构图,这里我们关心Linux kernel层 可以看到kernel层分为三层: 输入子系统设备驱动:处理与硬件相关的信息,调用input API注册输入设备,并把数据往上报 输入子系统核心层:为事件处理层和设…

关于QGroundControl的软件架构的理解

首先QGC是基于QT平台开发,个人理解软件架构即为项目前后端结构,以及前后端数据交互的逻辑。下面是对QGroundControl源码的一些个人理解,写这个博客只是为了记录下来,防止时间久了忘记,过程中看了一些大佬的博客来帮助理…

服务运营 |摘要: Healthcare Management Science 近期论文汇总

推文作者:李舒湉 罗毓灵 编者按 Healthcare Management Science 近期论文汇总 Healthcare Management Science 论文精选(三月下) 1Monitoring policy in the context of preventive treatment of cardiovascular disease https://link.sprin…

SQL——视图检查选项 local

create table stue ( id int auto_increment primary key comment 客户编号, name varchar(20) comment 客户名称, mima varchar(100) comment客户密码 , phonr varchar(20) comment 客户电话, xb char(2) …

【目录】《电路》上下、《电力电子学》、《数字电路》

1、知乎----作为电力电子专业的学生,有哪些专业书籍值得反复阅读? 一门课 / 一本书 经不经典,直接去 中国大学MOOC 上搜一搜就知道了 《电路》 电路主要讲:电压、电阻、电容的一些计算公式 《电力电子学》 https://www.zhih…