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

news/2024/11/24 4:52:40/

方法的结构

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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.ppmy.cn/news/147450.html

相关文章

记一次通过binlog日志恢复MySQL数据库的经历

通过binlog日志恢复MySQL数据库的数据 一、起因 起因是我在自己服务器上搭建的博客被黑客攻击,黑客删除了我的数据库并且要求支付比特币才给我恢复。 博客所有的表和数据都被清空,只留下了勒索金额和地址。如图 穷鬼如我当然是: 二、恢复数…

v-bind和v-model的区别和联系

1、这两个指令都可以完成数据绑定 2、v-bind是单向数据绑定&#xff0c;只有data里面的数据可以改变视图里的数据 data > html视图 3、v-model是双向数据绑定&#xff0c;data里面的数据和视图里的数据可以互相改变 data <> html视图 4、v-bind可以在任何html标签中…

OCP-1Z0-051 第68题 ORDER BY的默认值

一、原题 Which statement is true regarding the default behavior of the ORDER BY clause? A. In a character sort, the values are case- sensitive. B. NULL values are not considered at all by the sort operation. C. Only those columns that are specified in th…

显著性水平对应的临界值_统计学问题 常有的显著性水平a 所对应的Z值是哪些...

展开全部 z(a/2)指的是标准正态分布的双侧临界值&#xff0c;z(a)当然就是单侧临界值。a(阿尔法)指62616964757a686964616fe4b893e5b19e31333431356638的是显著水平&#xff0c;一般是0.05、0.01等。而95%、99%指的是置信水平&#xff0c;不要搞混这两个概念&#xff0c;置信水…

黑苹果显卡div和d-sub的选择

今天试了下&#xff0c;d-sub 和dvi 接口&#xff0c;发现真的事dvi接口很清楚&#xff0c;所以推荐大家还是插入div接口的好&#xff0c;现在驱动成功了9800gt 和5750 &#xff0c;还是挺开心的&#xff0c;10.9真的才顺了。

统计学(三):置信区间; Z 检验(样本平均数的假设检验), 均值分布, 附Python实现(大牌护肤品碧欧泉背后的秘密)

引言 本篇博文开始前&#xff0c;请熟知如下链接中的概念&#xff1b;当然&#xff0c;如果直接开始&#xff0c;遇到遗忘的统计学名词再返回查找也没问题。 统计学(二)&#xff1a;假设检验导论 (深入浅出超详解&#xff0c;附Python 代码)&#xff1b;置信区间与 Z 检验先修…

计算类氦离子基态能级z=1-103从氢到铹

让原子核外有两个电子&#xff0c;让核电荷数z1-103从H到Lr。 两个1s电子波函数为 能级为 分成三部分&#xff0c;两个电子的动能和势能&#xff0c;加上两个电子之间的排斥能 将第一部分打开 第二部分与第一部分操作方法相同 打开第三部分&#xff0c;单中心双电子排斥能积分…

matlab画二维颜色深浅,在matlab中如何在二维图中用颜色深浅来代表数值z大小,已知(x,y,z)一组向量。...

在matlab中如何在二维图中用颜色深浅来代表数值z大小,就像ansys中的应力云图那样的,已知(x,y,z)一组向量,其中(x,y)为某一区域内的位置坐标,z为此处的物理量大小。 注:1.x,y形成的网格间距不完全相等,部分区域点比较集中 2.后面附有部分数据,与附件中数据相同 x …