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

c# 方法参数修饰符(out、ref、in)的区别

在C#中,ref、out和in是三种方法参数修饰符,它们在传递参数的方式和作用上有所不同。

ref修饰符

传递方式:使用ref修饰符的参数可以是输入输出参数,即在方法调用前后都可以对其进行修改。
作用:通过ref修饰符传递的参数必须在方法调用之前初始化,并且方法内对参数的修改会对调用方的变量产生影响。ref修饰符可以用于值类型和引用类型参数。
out修饰符:

传递方式:使用out修饰符的参数只能作为输出参数,即在方法内部必须对其进行赋值。
作用:通过out修饰符传递的参数可以在方法内部进行赋值,而不需要在方法调用之前初始化。out修饰符可以用于值类型和引用类型参数。
in修饰符:

传递方式:使用in修饰符的参数只能作为输入参数,即在方法内部不能对其进行修改。
作用:通过in修饰符传递的参数可以防止方法对其进行修改,从而提高代码的可靠性和安全性。in修饰符只能用于值类型和只读引用类型参数,并且不能用于方法的返回值。
总结:

ref修饰符用于输入输出参数,方法内部可以对其进行修改。
out修饰符用于输出参数,方法内部必须对其进行赋值。
in修饰符用于输入参数,方法内部不能对其进行修改。
使用这些修饰符可以灵活地控制方法参数的传递方式,从而满足不同的需求。

internal class Program{private static void Main(string[] args){//int num1 = 10;//number0(num1);//Console.WriteLine("初始值:" + num1);//Console.ReadLine();//------------------------------//int num1 = 10;//使用ref修饰符,实参必须初始化//numberRef(ref num1);//Console.WriteLine("初始值:" + num1);//Console.ReadLine();//-------------------------------//int num1 = 10;//numberOut(out num1);//Console.WriteLine("初始化的值:" + num1);//Console.ReadLine();//---------------------------------int num1 = 10;numberIn(in num1);//可以省略inConsole.ReadLine();}/// <summary>/// 无修饰符/// </summary>/// <param name="num1"></param>public static void number0(int num1){num1 *= 2;Console.WriteLine("修改后的值:" + num1);}/// <summary>/// ref(reference)修饰的参数必须初始化,方法内部,通过引用传递,修改实参的值,最终输出/// </summary>/// <param name="num1"></param>public static void numberRef(ref int num1){num1 *= 2;Console.WriteLine("ref参数修改后的值:" + num1);}/// <summary>/// out修饰的参数可以初始化,也可以不初始化,传递过来的参数会被清空,最终,以方法内部赋值的结果为准/// </summary>/// <param name="number1"></param>public static void numberOut(out int number1){number1 = 20;Console.WriteLine("out参数修改的值:" + number1);}/// <summary>/// in修饰符参数,限制方法参数传递过来的实参的修改/// </summary>/// <param name="number1"></param>public static void numberIn(in int number1){//方法内部不能修改,传递过来的实参,只能读取,不能修改// number1 = 10;Console.WriteLine("in 参数修饰符:" + number1);}}
http://www.lryc.cn/news/137918.html

相关文章:

  • shell 编写一个带有进度条的程序安装脚本
  • 服务器数据恢复-AIX PV完整镜像方法以及误删LV的数据恢复方案
  • 首席执行官Adam Selipsky解读“亚马逊云科技的技术产品差异化”
  • C++ Day3
  • OpenEuler 安装mysql
  • [Docker] Windows 下基于WSL2 安装
  • (未完成)【Spring专题】SringAOP底层原理解析——阶段三(AOP)
  • 使用Nodejs创建简单的HTTP服务器,借助内网穿透工具实现公网访问的方法分享
  • 使用 OpenTelemetry 构建可观测性 03 - 导出
  • Pyqt5打开电脑摄像头进行拍照
  • Flowable 7.0.0.M2 版本功能
  • 【golang】关于指针的有限操作
  • ProGuard + SpringBoot3 + JDK17
  • Kafka面试
  • Amazon CloudFront 部署小指南(六)- Lambda@Edge 基础与诊断
  • centos7安装hadoop 单机版
  • 村口的人家排放污水,污水浸染了整个村子,怎么办
  • 算法leetcode|72. 编辑距离(rust重拳出击)
  • 实训笔记8.21
  • robust distortion-free watermarks for language models
  • PTS性能测试工具-使用记录
  • 【boost网络库从青铜到王者】第六篇:asio网络编程中的socket异步读(接收)写(发送)
  • django sqlite3操作和manage.py功能介绍
  • 【SQL语句】SQL编写规范
  • 后端项目开发:工具类封装(序列化、反射)
  • 软件测试技术分享丨遇到bug怎么分析?
  • LeetCode无重复字符的最长子串
  • 17.2.2 【Linux】通过systemctl观察系统上所有的服务
  • Redis扩容机制与一致性哈希算法解析
  • BDA初级分析——可视化基础