C# 中 ref 和out 的区别

out 参数前必须先为其赋值,即必须由被调用方为其赋值。

class TestOut
{static void FillArray(out int[] arr){// Initialize the array:arr = new int[5] { 1, 2, 3, 4, 5 };}static void Main(){int[] theArray; // Initialization is not required// Pass the array to the callee using out:FillArray(out theArray);// Display the array elements:System.Console.WriteLine("Array elements are:");for (int i = 0; i < theArray.Length; i++){System.Console.Write(theArray[i] + " ");}// Keep the console window open in debug mode.System.Console.WriteLine("Press any key to exit.");System.Console.ReadKey();}
}/* Output:Array elements are:1 2 3 4 5        */

 

ref 参数必须由调用方明确赋值。因此不需要由接受方明确赋值。

class TestRef
{static void FillArray(ref int[] arr){// Create the array on demand:if (arr == null){arr = new int[10];}// Fill the array:arr[0] = 1111;arr[4] = 5555;}static void Main(){// Initialize the array:int[] theArray = { 1, 2, 3, 4, 5 };// Pass the array using ref:FillArray(ref theArray);// Display the updated array:System.Console.WriteLine("Array elements are:");for (int i = 0; i < theArray.Length; i++){System.Console.Write(theArray[i] + " ");}// Keep the console window open in debug mode.System.Console.WriteLine("Press any key to exit.");System.Console.ReadKey();}
}/* Output:Array elements are:1111 2 3 4 5555*/

 

区别:

ref和out的区别在C# 中,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员更改参数的值,并保持该更改。若要通过引用传递参数, 可使用ref或out关键字。ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量。它们的区别是:

1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。

2、使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配。

3、out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。

out

方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。

当希望方法返回多个值时,声明 out 方法非常有用。使用 out 参数的方法仍然可以返回一个值。一个方法可以有一个以上的 out 参数。

若要使用 out 参数,必须将参数作为 out 参数显式传递到方法。out 参数的值不会传递到 out 参数。

不必初始化作为 out 参数传递的变量。然而,必须在方法返回之前为 out 参数赋值。

属性不是变量,不能作为 out 参数传递。

 

ref是    有进有出,而out是       只出不进。

转载于:https://www.cnblogs.com/mchuang/p/5006411.html

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

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

相关文章

JavaSE——面向对象基础(思想、类与对象、构造方法、重载、匿名对象)

第1节 面向对象基础 一、面向对象思想 1.1 概述 面向对象&#xff08;Object Oriented&#xff09;是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发&#xff0c;是一种对现实世界理解和抽象的方法&#xff0c;是计算机编程技术发展到一定阶段的产物。面向对…

谷歌发布颠覆性研究:不训练不调参,AI自动构建超强网络,告别炼丹一大步...

来源&#xff1a;凹非寺 机器学习全靠调参&#xff1f;这个思路已经过时了。谷歌大脑团队发布了一项新研究&#xff1a;只靠神经网络架构搜索出的网络&#xff0c;不训练&#xff0c;不调参&#xff0c;就能直接执行任务。这样的网络叫做WANN&#xff0c;权重不可知神经网络。它…

JavaSE——面向对象进阶(封装、this、static、代码块、包、权限修饰符、main方法详解)

第2节 面向对象进阶 一、封装与private 概述&#xff1a; 封装的意义在于保护或者防止代码&#xff08;数据&#xff09;被我们无意中破坏。保护成员属性&#xff0c;不让类以外的程序直接访问和修改。封装原则&#xff1a; 隐藏对象的属性和实现细节&#xff0c;仅对外公开访…

使用python的butter带通滤波器时出现RuntimeWarning

RuntimeWarning: invalid value encountered in reduce ret umr_sum(arr, axis, dtype, out, keepdims) RuntimeWarning: overflow encountered in reduce ret umr_sum(arr, axis, dtype, out, keepdims) 原因是butter带通滤波器的阶数过高&#xff0c;降低滤波器阶数…

孙正义:互联网流量将转化为智能AI流量,我的时代终于来了

“今后&#xff0c;增加软银集团的股东价值的成长引擎是什么呢&#xff1f;从上面的营业利润的增长来看&#xff0c;SVF&#xff08;软银愿景基金&#xff09;贡献了80%。SVF是SoftBank2.0最重要的经营引擎。首先&#xff0c;大约2年时间&#xff0c;SVF的投资对象已经超过了80…

lucene索引创建

1、创建Directory Directory directoryFSDirectory.open(new File("D:/eclipse-jee-mars-1-win32-x86_64/lucenefile/index01")); 2、创建IndexWriter IndexWriterConfig indexWriterConfignew IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.L…

JavaSE——面向对象高级(继承、final关键字、抽象类与接口、多态、Object类、内部类、包装类、可变参数)

第3节 面向对象高级 一、继承 1.1 概述和使用 继承是java面向对象编程技术的一块基石&#xff0c;因为它允许创建分等级层次的类。继承就是子类继承父类的特征和行为&#xff0c;使得子类对象&#xff08;实例&#xff09;具有父类的实例域和方法&#xff0c;或子类从父类继…

word的公式后加编码后自动变小

如图所示&#xff0c;在公式后面加编码后公式也变小了&#xff1a; 加编码前&#xff1a; 加编码后&#xff1a; 采用样式分隔符&#xff08;Ctrlaltenter&#xff09;即可解决&#xff0c;输完公式后&#xff0c;按enter转行&#xff0c;输入你要的东西&#xff08;编号什么的…

人工智能70年:科幻和现实的交融

文章素材来源&#xff1a;BBC图片来源&#xff1a;网络【导读】人类飞跑着进入人工智能&#xff08;AI&#xff09;时代。粗略估算现在人们日常生活中有20多种寻常的AI&#xff0c;从垃圾邮件过滤器到叫车软件。AI被分为两类&#xff0c;这些执行具体任务的AI属于“弱人工智能”…

vim 插件之commentary

下载地址 http://www.vim.org/scripts/script.php?script_id3695 如果是使用vundle来管理这个插件的话&#xff0c;你可以添加如下配置 tpope/vim-commentary 这个插件可以根据你当前打开的文件类型&#xff0c;来选择相应的注释方式。 使用的命令是 \\位移 比如&#xff0c;…

python保存的图片不完整

当图例在图外时&#xff0c;用plt.savefig保存的图片图例只保存了一半&#xff0c;在plt.savefig中加入“ bbox_inches tight”参数即可 plt.savefig(path, bbox_inches tight)

JavaSE——异常处理(异常简介、try-catch-finally、throws、throw)

第4节 异常处理 异常处理学习的目标&#xff1a; 明确说明是异常&#xff08;重点&#xff09; 能辨识出常见的异常及其含义&#xff08;熟悉&#xff09; 理解异常产生的原理&#xff08;了解&#xff09; 能处理异常&#xff08;重点&#xff09; 能够自定义异常&#x…

专访「算法之父」Michael Saunders:人工智能未来的突破点可能在自动驾驶

来源&#xff1a;雷锋网 AI 科技评论雷锋网 AI 科技评论按&#xff0c;4 月 25 日&#xff0c;在由涂鸦智能联合知名财经媒体《新财富》、人工智能领域知名媒体《全球智能化商业》共同举办的「全球智能化商业峰会」上&#xff0c;斯坦福大学荣誉教授、新西兰皇家学会荣誉成员、…

python将图例画在图外

plt.legend(labels[label1,label2], bbox_to_anchor(1, 1))

从指南针到北斗:中国导航系统促进世界互联互通

6月11日&#xff0c;在维也纳联合国国际会议中心&#xff0c;联合国外层空间事务办公室主任迪皮波&#xff08;右&#xff09;参观中国古代计时装置水运仪象台。本报记者 冯雪珺摄来源&#xff1a;人民日报核心阅读中国卫星导航系统管理办公室在维也纳联合国国际会议中心举办“…

JavaSE——常用类库(上)(泛型、Objects、Math、ArraysBigDecimal类)

第1节 常用类库&#xff08;上&#xff09; 面向对象更多是思想上的东西&#xff0c;常用类库更多是工具上的东西&#xff0c;熟能生巧&#xff0c;多整理笔记。 一、泛型 1.1 概述 泛型&#xff0c;即“参数化类型”。就是将类型由原来具体类型进行参数化 &#xff0c;类似…

如何修改matplotlib的图例的标题的字体大小

在plt.legend&#xff08;&#xff09;里添加fontsize参数可以改变图例的字体大小&#xff0c;但是不能改变图例的标题的字体大小&#xff0c;在前面加一句&#xff1a; matplotlib.rcParams.update({font.size: 13}) 即可同时改变图例的标题字体大小

C#操作符??和?:

先看如下代码&#xff1a; string strParam Request.Params["param"];if ( strParam null ){strParam "";}string strParamRequest.Params["param"] null ? "": Request.Params["param"];你发现&#xff0c;尽管实现的同…

查找论文源代码网站

https://paperswithcode.com/

朗兰兹纲领:关于数学大一统的伟大构想

麦克斯韦方程组来源&#xff1a;今日头条我们经常聊到物理学家都在追寻物理学的大一统&#xff0c;物理学的第一次大一统是麦克斯韦的麦克斯韦方程组&#xff0c;将电学与磁学相统一&#xff0c;建立了电磁学理论&#xff0c;后来&#xff0c;爱因斯坦想继续完成麦克斯韦未竟之…