当前位置: 首页 > news >正文

010集——按值传递、按引用传递等方法——C#学习笔记

按值传递参数

这是参数传递的默认方式。在这种方式下,当调用一个方法时,会为每个值参数创建一个新的存储位置。

实际参数的值会复制给形参,实参和形参使用的是两个不同内存中的值。所以,当形参的值发生改变时,不会影响实参的值,从而保证了实参数据的安全。

按引用传递参数

引用参数是一个对变量的内存位置的引用。当按引用传递参数时,与值参数不同的是,它不会为这些参数创建一个新的存储位置。引用参数表示与提供给方法的实际参数具有相同的内存位置。

在 C# 中,使用 ref 关键字声明引用参数。下面的实例演示了这点:

using System;namespace PassingByValueAndReference
{public class ReferencePassing{public void Method_a(int refArgument)//默认按值传递,中间函数不改变外面的值{refArgument = refArgument + 5;}public void Method(ref int refArgument)//ref是按引用传递,通过这个函数,改变外面的值{refArgument = refArgument + 5;}}public class MyTest{public static void Main() // 切记Main中,M大写,且通常是static的  {int number = 1;ReferencePassing referencePasser = new ReferencePassing(); // 创建类的实例  referencePasser.Method_a(number); // 调用方法,按值传递number  Console.WriteLine("按值传递是:" + number); // 输出: 6  referencePasser.Method(ref number); // 调用方法,按引用传递number  Console.WriteLine("按引用ref传递是:" + number); // 输出: 6  Console.ReadLine();}}
}

我们可以通过使用out关键字或ref关键字来模拟按输出传递的效果,这允许函数修改其参数的值,并将这些修改反映到调用者中。

使用out关键字
out关键字用于输出参数,它要求方法必须为out参数赋值,并且在方法调用时不需要初始化out参数。这通常用于当方法需要返回多个值时。

按输出传递参数

return 语句可用于只从函数中返回一个值。但是,可以使用 输出参数 来从函数中返回两个值。输出参数会把方法输出的数据赋给自己,其他方面与引用参数相似。通过手工输入改变两个变量的值

using System;namespace CalculatorApplication
{class NumberManipulator{public void getValues(out int x, out int y){Console.WriteLine("请输入第一个值: ");x = Convert.ToInt32(Console.ReadLine());Console.WriteLine("请输入第二个值: ");y = Convert.ToInt32(Console.ReadLine());}static void Main(string[] args){NumberManipulator n = new NumberManipulator();/* 局部变量定义 */int a, b;/* 调用函数来获取值 */n.getValues(out a, out b);Console.WriteLine("在方法调用之后,a 的值: {0}", a);Console.WriteLine("在方法调用之后,b 的值: {0}", b);Console.ReadLine();}}
}
http://www.lryc.cn/news/424636.html

相关文章:

  • Linux系统调优技巧
  • 计算机学习
  • 数字医学影像系统PACS源码,三甲以下医院都能满足,C#语言开发,C/S架构系统成熟稳定,支持二次开发项目使用。
  • C++语言基础|循环结构
  • 【学习笔记】解决在声音输出中找不到蓝牙耳机设备的问题
  • PPPoE基础笔记
  • 开发组日志记录SPEC_v0.1.0
  • MySQL8 innoDB引擎的精髓
  • 【C语言实现花屏效果并打包程序为exe可执行文件】
  • 数据结构——排序(2):选择排序+交换排序
  • jenkins升级踩坑记录
  • mysql笔记第二篇
  • Facebook的区块链技术:提升数据安全与隐私保护
  • ⌈ 传知代码 ⌋ Visual SLAM函数
  • Vue组件之间的通信
  • 【AI 绘画】模型转换与快速生图(基于diffusers)
  • 甄选范文“论软件设计方法及其应”软考高级论文系统架构设计师论文
  • leetcode线段树(2940. 找到 Alice 和 Bob 可以相遇的建筑)
  • 用于不平衡医疗数据分类的主动SMOTE
  • linux文件更新日期与系统日期比较
  • leetCode - - - 哈希表
  • NGINX自动清理180天之前的日志
  • jackson 轻松搞定接口数据脱敏
  • Nginx 正则表达式与rewrite
  • tekton什么情况下在Dockerfile中需要用copy
  • 第九届世界渲染大赛在哪里提交作品呢?
  • fastjson(autoType)反序列化漏洞
  • Java入门基础16:集合框架1(Collection集合体系、List、Set)
  • Qt如何调用接口
  • Android14之解决编译libaaudio.so报错问题(二百二十七)