out关键字和ref关键字的区别

news/2024/9/29 1:02:02

我们只需要知道一点,out经常用在多个参数的输出
ref用在数据的双向传递就好了

public string GetString()
{return "Hello,World!";
}
var s=GetString();

这是一个简单输出string的方法,但是只输出了一个参数
我们输出两个参数或者多个参数也会用到枚举,元组,列表,数组
虽然枚举,元组,列表,数组能输出多个参数,但是它们要进行相应的转化和赋值
使用out就比较简单了

public void GetString(out int a,out int b)
{a=1,b10;
}
int a,b;
GetString(out a,out b);
Console.WriteLine(a);
Console.WriteLine(b);

我们现在尝试同时使用ref和out写一个demo

public class RefDemo
{public void UsageInt(ref int a, ref int b){a = 1; b = 999;}public void UsageString(ref string a, ref string b){a = "123";b = "321";}
}public class OutDemo{public void UsageInt(out int a,out int b){a = 1;b = 999;}public void UsageString(out string a,out string b){a = "123";b = "321";}}
public static void UsageOut()
{OutDemo outDemo = new OutDemo();int a, b;outDemo.UsageInt(out a, out b);Console.WriteLine(a);Console.WriteLine(b);Console.WriteLine("======================");string a2, b2;outDemo.UsageString(out a2, out b2);Console.WriteLine(a2);Console.WriteLine(b2);
}public static void UsageRef()
{RefDemo refDemo = new RefDemo();int a=0, b=0;refDemo.UsageInt(ref a, ref b);Console.WriteLine(a);Console.WriteLine(b);Console.WriteLine("======================");string a2="", b2="";refDemo.UsageString(ref a2, ref b2);Console.WriteLine(a2);Console.WriteLine(b2);
}

输出结果

1
999
======================
123
321

从上面的demo可以看出,我们使用两个关键字除了最开始初始化不同,其他的结果都一样
其中out关键字可以看作ref的子集,out比ref关键字强大,因为它不需要初始化,
但是这是假相,没有很好的体现出ref的作用,我这里写这两个demo,是先让你们熟悉这两个关键字的用法
接下来我们看看两个关键字的区别

 public static void Ref(){int number = 10;Console.WriteLine("原始值: " + number);ModifyNumberFromRef(ref number);Console.WriteLine("修改后的值: " + number);number = 100;Console.WriteLine("再次修改原始值: " + number);ModifyNumberFromRef(ref number);Console.WriteLine("再次修改后的值: " + number);}static void ModifyNumberFromRef(ref int num){num *= 2;Console.WriteLine("在方法内部修改后的值: " + num);}public static void Out(){int number = 10;Console.WriteLine("原始值: " + number);ModifyNumberFromOut(out number);Console.WriteLine("修改后的值: " + number);number = 100;Console.WriteLine("再次修改原始值: " + number);ModifyNumberFromOut(out number);Console.WriteLine("再次修改后的值: " + number);}static void ModifyNumberFromOut(out int num){num= 100;num *= 2;Console.WriteLine("在方法内部修改后的值: " + num);}

输出结果

原始值: 10
在方法内部修改后的值: 20
修改后的值: 20
再次修改原始值: 100
在方法内部修改后的值: 200
再次修改后的值: 200
-------------------------
原始值: 10
在方法内部修改后的值: 200
修改后的值: 200
再次修改原始值: 100
在方法内部修改后的值: 200
再次修改后的值: 200

通过输出我们可以很明显看出两个关键字的区别

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

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

相关文章

卡掉hash的方法

如何构造数据,使得两个字符串的hash值相等大质数hash 通常,这个质数会选择在 \(10^9\) 附近,如 \(998244353\),\(10^9+7\)。 考虑生日碰撞,欲达到 50% 成功率,需要尝试的次数为 \[\begin{align} Q(H)\approx\sqrt{\frac\pi2H}\approx39623 \end{align} \]可以参考概率表所…

人员摔倒识别预警系统

人员摔倒识别预警系统通过opencv网络模型技术,人员摔倒识别预警系统能够智能检测现场画面中人员有没有摔倒,特别是高危作业范围老弱活动场地,如:工地、工程、社区、养老院等。人员摔倒识别预警系统检测出人员摔倒,无需人为干预系统可以立刻抓拍告警,同步回传后台系统平台…

河道垃圾识别系统

河道垃圾识别系统通过智能视频分析技术,河道垃圾识别系统对河道水面垃圾进行7*24小时自动不间断实时监测,当河道垃圾识别系统监测到河道水面出现垃圾时,立即抓拍告警,通知后台值班人员进行清理。河道垃圾识别系统有利于节省传统河道巡检的人力,提高识别巡检效率。河道垃圾…

全网最适合入门的面向对象编程教程:54 Python字符串与序列化-字符串格式化与format方法

在 Python 中,字符串格式化是将变量插入到字符串中的一种方式,Python 提供了多种字符串格式化的方法,包括旧式的 % 格式化、新式的 str.format 方法以及 f-string(格式化字符串字面量)。全网最适合入门的面向对象编程教程:54 Python 字符串与序列化-字符串格式化与 forma…

智慧工地AI视频分析系统

智慧工地AI视频分析系统通过图像识别技术,智慧工地AI视频分析系统配合现场已有摄像头,不需人为干预自动识别现场作业人员穿戴是否合规如安全帽反光衣有无穿戴、高空作业是否穿戴安全带、抽烟打电话识别、人员打架、危险区域人员闯入识别、工作时间睡岗离岗识别、工地车辆识别…

员工工作服穿戴识别系统

员工工作服穿戴识别系统基于YOLO网络模型图像识别技术,员工工作服穿戴识别系统通过现场已有的监控摄像头,不需新增硬件对现场未按要求穿戴工服的违规行为实时预警,将违规行为信息及时推送给后台管理人员。员工工作服穿戴识别系统通过AI技术手段提高现场对施工作业人员穿戴监…

劳保防护用品穿戴检测系统

劳保防护用品穿戴检测系统通过Opencv深度学习技术,劳保防护用品穿戴检测系统对现场作业人员行为以及安全作业防护穿戴用品进行全天候检测,当劳保防护用品穿戴检测系统检测到现场施工人员未按照要求进行施工穿戴防护用品,劳保防护用品穿戴检测系统立即对现场违规穿戴人员或者…

加油站ai系统视频监测

加油站ai系统视频监测通过深度学习边缘计算技术,加油站ai系统视频监测对现场画面中人员作业行为实时进行检测分析,加油站ai系统视频监测不需人为干预通过AI技术识别异常违规行为信息,加油站ai系统视频监测能将风险及时发现并进行预警,提升加油站作业全流程安全系数。加油站…