ref,out的作用和好处

ref和out这两个关键词可以用来传参,他们的区别仅仅是在c#里面的。。而他们在clr里面是没有区别的。

 

下面是写了个例子,展示了怎么去用这两个关键词传参。以及他们的好处(这里都用的是引用类型)

首先定义一个类,类里面写了几个方法:

 public  class Base
    {
        //耗资源
        public string World( string x)
        {
            x = "1";
            return x;
        }
        //省资源
        public string Hellow(out string x)
        {
            x = "1";
            return x;
        }
        //省资源
        public string HellowWorld( ref string x)
        {
            x = "1";
            return x;
        }

    }

一下是对这几个方法的调用

  public Form1()
        {
             InitializeComponent();

             Base ba = new Base();

             string i;//可以不初始化。因为out
             MessageBox.Show(ba.Hellow(out i).ToString());

             string j=0;//必须初始化,因为ref
             MessageBox.Show(ba.HellowWorld(ref j).ToString());

             string k = 0;//普通写法,耗资源
             MessageBox.Show(ba.World(k).ToString());
            //上面这个方法类写法和下面这个一样
             //MessageBox.Show(ba.World(0).ToString());
        }

 我在代码里标注了使用ref,out传参比另一种平时使用的方式传参更省资源。原因是:

                    平时经常使用的那个传参方式,虽然方法记住的是参数的地址,内部是把参数的值作为一个副本传给方法的,所以是比较耗资源的。

                     至于方法如何操作这个副本,与参数本身是没有关系的。

 

                  而ref和out需要在方法外声明变量,他们给方法的依然是参数的地址,但是这时候传递的就不是值了,而是参数的引用,通过引用来更改参数,

                   所以参数的实例本身的值会被访问。

 

所以在给方法传递一个变量时,能保证不会影响变量的

 

    

转载于:https://www.cnblogs.com/xiaoleye/p/4758963.html

深度思考ref和out及其使用情景 首先我们概括一下其基本概念:1.ref和out都是对参数的修饰,只用于函数参数。2.想要改变实参的值时使用他们,且必使用他们,不论哪种类型变量。3.out强制被调用的函数赋值给所修饰的变量,ref没有限制。 下面从几个方面来讲解: 1.使用误区 2.常规的使用及从IL的角度瞧瞧 一、使用误区 请刚未接触过ref,out的童鞋先跳过这里看“常规的使用及从IL的角度瞧瞧”这一 阅读详情

相关推荐

Node框架之NestJS入门学习

文章主要分为三部分:1 NestJS 与Egg对比2 NestJS 基础知识介绍3 使用NestJS快速搭建应用,实现CURD操作e-link文档Egg官网NestJS 官网NestJS中文文档(非官方)

十九万里的博客 4742

ref和out知识点详解(C#)

ref和out突破了C#默认的参数传递规则,赋予开发者更底层的控制能力。提升性能(减少值类型复制)实现多返回值模式直接操作调用者的变量明确区分ref(输入+输出)和out(纯输出)的语义遵守编译器的初始化与赋值规则在可读性与性能之间权衡取舍理解这两个关键字的工作机制,有助于编写高效且意图清晰的C#代码。

Rocn666的博客 2241

PX4笔记系列(二)vtol_att_control中的tiltrotor解析

update_vtol_state() 注释:采用两段切换的简单逻辑来进行过渡 当切换过渡开关后,飞机将会开始倾转动力,逐渐加速,当飞机获得足够速度后动力将会完全打到向前的位置。对于过渡返回阶段动力则是简单地倾转回来。 如果(不在向前过渡指令下): 当前vtol飞行模式: 1、旋翼模式 无操作 2、固定翼模式 令vtol飞行模式切换到过渡返回模式 3、P1过渡模式 进入过渡失败安全返回至旋翼模式 4、P2过渡模式 进入过渡失败安全返回至旋翼模式 5、过渡返回模式 记录过渡返回时间=当前时间-过渡开始

hypersonicss的博客 1880

ref和out作用

作用:解决值类型和引用类型,在函数内部改值或者重新new,能够影响外部穿入的变量,进行同步修改。使用:在申明参数或者使用的时候,前面加上ref或out。out传入的变量不用初始化,但在方法内部必须赋值。ref传入的变量必须初始化,方法内部随意。

qq_39419629的博客 173

GprMax正演模拟:为什么你的反射波‘消失’了?可能是直达波在捣鬼(附Python后处理脚本)

本文深入探讨了GprMax正演模拟中反射波信号被直达波淹没的现象,并提供了Python后处理脚本的实战指南。通过时域置零、自适应增益控制、频域滤波等多种技术,有效增强反射波信号,帮助用户解决探地雷达模拟中的常见问题。文章还包含详细的代码示例和效果评估方法,适合GPR数据处理的研究人员和工程师参考。

weixin_29305313的博客 232

手把手教你用C++和NI-VISA写个简易仪器上位机(附QT工程配置)

本文详细介绍了如何使用C++和QT框架结合NI-VISA驱动开发跨平台仪器控制上位机软件。从Ubuntu环境配置、VISA通信核心架构设计到QT界面与业务逻辑解耦,提供了完整的实战指南和代码示例,帮助开发者快速构建专业级仪器控制程序。

weixin_42522374的博客 273

out与ref的作用和区别:

1、使用ref型参数时,传入的参数必须先被初始化,对out而言,必须在方法中对其完成初始化。 2、使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字,以满足匹配。 3、out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。 4、ref传进去的参数在函数内部可以直接使用,而out不可。 5、系统对ref的限制是更少一些的。 6、若要使用 ref 参数,必须将参数作为ref 参数显式传递到方法,ref 参数的值被传递到ref 参数。 ..

zymkingk的博客 568

30分钟搭建AI科研写作工作台:基于WorkBuddy的论文全流程加速实践

在人工智能技术日益普及的今天,如何利用智能工具提升专业领域工作效率成为关键课题。其核心原理在于通过模块化设计,将复杂的任务流程拆解为可复用、可编排的标准化技能单元,并结合精准的指令控制,实现从通用对话到深度任务执行的转变。这一技术价值在于显著降低重复性劳动强度,将人的创造力聚焦于核心决策与创新环节。在科研写作、数据分析、代码开发等场景中,这类智能工作台能有效辅助完成文献调研、内容生成、格式校验等繁琐步骤。本文以科研论文写作为具体应用场景,深入探讨如何利用WorkBuddy这一智能工作台,通过配置核心科研技能

weixin_29032489的博客 1497

out 、ref的区别和作用

out 、ref的区别和作用

qq_67285435的博客 795

Visual Studio 2015 插件开发 从入门到放弃(一)

必需知识:C#和Visual Studio (1)安装 Visual Studio 2015 的时候选择 Visual Studio 扩展性工具(Visual Studio Extensibility Tools)。对于已经安装好 Visual Studio 2015 的小伙伴,可以找VS2015的安装包,或者在程序与功能中找VS2015双击,在VS2015界面中选择 修改,再选择

AncientPeople的博客 2万+

点云处理指南介绍

指南目录,Open3D与PCL内容介绍

NNNNNathan的博客 1万+

ref和out的作用和区别 使用

解释说明:当将a或b传入后 这里传入的是Int (不管是值类型还是引用类型)传入的a或者b都将会被函数内重新赋值的内容覆盖。解决值类型和引用类型 在函数内部改值和重新声明时 能够影响外部传入的 变量。也就是说 不管是传入函数的变量是值类型还是引用类型 都将会被改变。形象地说:ref表示上车前必须买票 out表示下车前必须买票。ref在传入前 必须被赋值 在内部可以赋值也可以不赋值。out修饰的值 在传入到函数内后 必须被赋值。

m0_51889842的博客 346

MATLAB 与 STK 互联的两种连接方式详解

批量仿真推荐使用方法一;交互分析推荐使用方法二。可以根据具体任务灵活切换,也可以同时使用两种方式,提升建模与仿真的效率。

weixin_52370774的博客 1566

C#——ref和out的区别

ref和out都是C#中的关键字,所实现的功能也差不多,都是指定一个参数按照引用传递。对于编译后的程序而言,它们之间没有任何区别,也就是说它们只有语法区别。 总结起来,他们有如下语法区别: 1、ref传进去的参数必须在调用前初始化,out不必 int i; SomeMethod( ref i );// 语法错误 SomeMethod( out i );// 通过 2、ref传进去的参数在函数内部可以直接使用,而out不可(除非在函数体内部,out参数在使用之前赋值) public void SomeM.

Erenlui的博客 9571

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ref和out的区别

ref 关键字 是作用是把一个变量的引用传入函数,和 C/C++ 中的指针几乎一样,就是传入了这个变量的栈指针。 out 关键字 的作用是当你需要返回多个变量的时候,可以把一个变量加上 out 关键字,并在函数内对它赋值,以实现返回多个变量。

微微的猪食小窝 5052

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

总结ref和out的区别

之前每次遇到ref和out时,老是忘记他们的使用方法和区别。每次都要网上搜一下别人写的博客来回忆。这次干脆自己整合一下别人博客的内容,方便下次忘记时查询。 用途:  在C#中通过使用方法来获取返回值时,通常只能得到一个返回值。因此,当一个方法需要返回多个值的时候,就需要用到ref和out。   概述: ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做...

萝卜头敲代码 3万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

关键词ref和out的作用是什么?他们有什么区别?

作用: Ref:用于将方法内的变量改变后带出方法外; Out:一个方法有多个返回值的时候,用Out可以返回多个返回值; 区别: 使用ref参数时,传入的参数必须先初始化,Out在进入传入之前没必要初始化; Ref传进去的参数在方法内部可以直接使用,Out不可以,因为在就算有值也被清空了; 为了方便理解,可以参考以下代码: public class Program { ...

小目标一个亿 5294

C#中ref和out的作用和区别

相同点:方法的定义和调用都必须显示使用ref、out关键字。都会导致参数按引用传递。 不同点:传递给ref关键字的参数必须赋初始值,而out不用。out关键字会清空变量,即使变量已经赋值也不行,退出函数时所有out引用个变量都要赋值。   说明:ref的应用场景是内部对外部

qingYun1029的博客 5886

【C#基础】ref 和 out 的区别

用途: 在C#中通过使用方法来获取返回值时,通常只能得到一个返回值。因此,当一个方法需要返回多个值的时候,就需要用到ref和out。 正确的使用ref: class Program { static void Main(string[] args) { Program pg = new Program(); int x = 10; int y = 20; pg.GetVal

墨苒孤的博客 7451

C#系列之ref和out的区别

本文详细介绍了C#中ref和out关键字的区别,通过代码可以透彻理解。

qiaodahua的博客 1714

C#基础in,out,ref的作用和区别

test

THREEK的专栏 1642

Unity3D中ref和out

ref和out 都是按地址传递的,使用后都将改变原来的数值。 别人总结的两个区别为:ref是有进有出,out是只出不进。 1.ref参数 作用: 将一个变量传入一个函数中进行"处理","处理"完成后,再将"处理"后的值带出函数。 语法: 使用时形参和实参都要添加ref关键字。 测试: using System.Collections; using System.Collections.Generic; using UnityEngine; public class NewBehaviourScript :

ZJ_____W的博客 1922

C#中ref和out的区别

看了很多.按照 自己明白解释一下 .NET Ref和Out关键字 对于值类型。如果不使用ref /out则传递的只是这些值的COPY,使用了Ref和Out的效果就几乎和C中使用了指针变量一样。(传递的就是原值),它能够让你直接对原数进行操作,而不是对那个原数的Copy进行操作 对于引用类型:如果不使用ref /out,因为传递的是引用类型的地址值,则将传递引用类

水书选 的专栏 6368

C#中关键字ref和out

ref ref:MSDN的定义为:“The ref keyword indicates a value that is passed by reference.”就是通过引用来传递参数。ref也是Reference的缩写。 不使用ref using System; namespace Test_Code { class A { public void Method( int a) { a += 1; } pu

Rosiness^的博客 9882

ref和out的区别,以及使用方法

在C#中,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员更改参数的值,并保持该更改。若要通过引用传递参数, 可使用ref或out关键字。ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量。它们的区别是: 1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。 2、使用ref和out时,在方法的参数和执行方法时,都要...

qq_38411133的博客 2286

C# out 和 ref

首先,俩者都是按地址传递的,使用后都将改变原来参数的数值。 其次,ref可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所以你必须初始化一次。这个就是俩个的区别,或者说就像有的网友说的 —— ref是有进有出,out是只出不进。 ref(C#参考) ref关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,...

南七小僧的学海无涯 586
上一篇: 2015年8月25号---用户管理各命令的使用
下一篇: Linux用户管理各命令的使用
weixin_34351321
博客等级 码龄11年 3953粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值