ref在传递参数的作用是什么

问题描述

ref在传递引用类型的参数时起到的作用是什么?

解决方案

解决方案二:
1.ref关键字使参数按引用传递。2.其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。3.使用ref参数,方法定义和调用方法都必须显式使用ref关键字4.传递到ref参数的参数必须最先初始化。
解决方案三:
可以改变传入变量的值比如test(refstrings)可以改变s的值,而没有ref的话,你即便在函数内部改变了s,出了函数体,s还会恢复传入的值
解决方案四:
ref一般是传递值类型的参数吧,意思是将值类型的参数按引用类型参数来传递.引用类型还需要ref吗??!
解决方案五:
嗯,傳入一個值,在函數體中改變它,結束之后,該改變保存
解决方案六:
学习了!!谢谢!!
解决方案七:
引用1楼ojlovecd的回复:

1.ref关键字使参数按引用传递。2.其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。3.使用ref参数,方法定义和调用方法都必须显式使用ref关键字4.传递到ref参数的参数必须最先初始化。

同意
解决方案八:
可以改变传入变量的值比如test(refstrings)可以改变s的值,而没有ref的话,你即便在函数内部改变了s,出了函数体,s还会恢复传入的值如:s=10;test(refstrings){s=30;}prentfs;如果不加ref那么s最后的值是10;如果加ref那么随后的值是30;
解决方案九:
引用3楼mohugomohu的回复:

ref一般是传递值类型的参数吧,意思是将值类型的参数按引用类型参数来传递.引用类型还需要ref吗??!

在c/s模式下即使引用类型也是要加ref的,以保证服务器端的修改能传回客户端
解决方案十:
具体可看msdn。
解决方案十一:
ref关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用ref参数,则方法定义和调用方法都必须显式使用ref关键字。例如:复制代码classRefExample{staticvoidMethod(refinti){i=44;}staticvoidMain(){intval=0;Method(refval);//valisnow44}}传递到ref参数的参数必须最先初始化。这与out不同,out的参数在传递之前不需要显式初始化。(请参见out。)尽管ref和out在运行时的处理方式不同,但它们在编译时的处理方式是相同的。因此,如果一个方法采用ref参数,而另一个方法采用out参数,则无法重载这两个方法。例如,从编译的角度来看,以下代码中的两个方法是完全相同的,因此将不会编译以下代码:复制代码classCS0663_Example{//compilererrorCS0663:"cannotdefineoverloaded//methodsthatdifferonlyonrefandout"publicvoidSampleMethod(refinti){}publicvoidSampleMethod(outinti){}}但是,如果一个方法采用ref或out参数,而另一个方法不采用这两类参数,则可以进行重载,如下所示:复制代码classRefOutOverloadExample{publicvoidSampleMethod(inti){}publicvoidSampleMethod(refinti){}}备注属性不是变量,因此不能作为ref参数传递。有关传递数组的信息,请参见使用ref和out传递数组。示例按引用传递值类型(如上所示)是有用的,但是ref对于传递引用类型也是很有用的。这允许被调用的方法修改该引用所引用的对象,因为引用本身是按引用来传递的。下面的示例显示出当引用类型作为ref参数传递时,可以更改对象本身。复制代码classRefRefExample{staticvoidMethod(refstrings){s="changed";}staticvoidMain(){stringstr="original";Method(refstr);//strisnow"changed"}}
解决方案十二:
ref关键字使参数按引用传递。
解决方案十三:
classX{voidM1(intv){v=100;}voidM2(refintv){v=100;}}...staticvoidMain(){Xx=newX();intv=999;x.M1(v);//这时v还是999,进入时参数值为999一个v的copyx.M2(refv);//这时v是100,进入时为v的引用,值为999,值和上面一样}本来值传到方法中时是传的copy,但加了ref就是传这个值的地址(引用)
解决方案十四:
引用传递,这样在其它方法里可以一起修改变量

时间: 2024-08-30 23:21:16

ref在传递参数的作用是什么的相关文章

C# 中的 Out 和 Ref 及Params 参数

  out 和ref 参数 经常用来通过方法传递参数来获取值,当您的方法不只有一个返回值的时候,这两个参数就发挥作用了.ref是传递参数的地址,out是返回值,两者有一定的相同之处,不过也有不同点. 在这篇文章里,我将解释如何在c#应用中使用这两个参数. 1.out 参数 out 方法参数关键字使方法引用传递到方法的同一个变量.当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中. public class mathClass{public static int TestOut

c#中通过值和引用传递参数(downmoon)

c#中通过值和引用传递参数(downmoon)在 C# 中,既可以通过值也可以通过引用传递参数.通过引用传递参数允许函数成员(方法.属性.索引器.运算符和构造函数)更改参数的值,并保持该更改.若要通过引用传递参数,请使用 ref 或 out 关键字.为简单起见,本主题的示例中只使用了 ref 关键字.有关 ref 和 out 之间的差异的信息,请参见.使用 ref 和 out 传递数组. 本主题包括下列章节: 传递值类型参数 传递引用类型参数它还包括以下示例: 示例 演示 是否使用 ref 或

c#中通过值和引用传递参数

在 C# 中,既可以通过值也可以通过引用传递参数.通过引用传递参数允许函数成员(方法.属性.索引器.运算符和构造函数)更改参数的值,并保持该更改.若要通过引用传递参数,请使用 ref 或 out 关键字.为简单起见,本主题的示例中只使用了 ref 关键字.有关 ref 和 out 之间的差异的信息,请参见.使用 ref 和 out 传递数组. 本主题包括下列章节: 传递值类型参数 传递引用类型参数它还包括以下示例: 示例 演示 是否使用 ref 或 out 1 通过值传递值类型 否 2 通过引用

C#方法中使用ref和out参数

一.创建ref参数在使用参数时,将参数传递给方法使用,而方法中对此值的任何改变并不能影响方法外部的变量.下面一个例子,控制台输出4,并没有对变量进行增量.例如:    class ReforOut    {        static void Geti(int a)        {            a++;        }        public static void Main(string[] args)        {            int i=4;       

jsp与javascript结合在页面间传递参数

javascript|js|页面 jsp与javascript结合用以处理confirm确认以达到传递参数到另一个页面的作用 目的是从数据库取出一系列数据,在每一行结束有删除一项,但是删除的时候需要用户确认是否删除. 首先我用了javascript来判断 <script language=javascript>function Myconfirm(id){if (confirm(是否确定删除该用户?)) {deleteUser(id)}} 这样在调用javascript:Myconfirm()

C#进程间通信--API传递参数(SendMessage)

原文 C#进程间通信--API传递参数(SendMessage)     我们不仅可以传递系统已经定义好的消息,还可以传递自定义的消息(只需要发送消息端和接收消息端对自定义的消息值统一即可).下面的发送和接收端同时演示了系统消息和自定义的消息.消息统一采用4位16进制的数. 1.系统消息使用的是0x0100(WM_KEYDOWN):0x0000--0x0400是系统自定义的消息,其中0x0000为WM_NULL,0x0400为WM_USER.0x0400以后的数值我们可以作为自定义的消息值.(见

Android Fragment传递参数Fragment.setArguments(Bundle bundle)

Fragment在Android3.0开始提供,并且在兼容包中也提供了Fragment特性的支持.Fragment的推出让我们编写和管理用户界面更快捷更方便了. 但当我们实例化自定义Fragment时,为什么官方推荐Fragment.setArguments(Bundle bundle)这种方式来传递参数,而不推荐通过构造方法直接来传递参数呢?为了弄清这个问题,我们可以做一个测试,分别测试下这两种方式的不同 首先,我们来测试下通过构造方法传递参数的情况 [java] view plain cop

方法传递参数的问题!

问题描述 一个方法里面的传递的参数的数据类型可不可以不同?例如:publiccanshu_jisuan(double[,]data,intdian_line,stringfilepath){...}请问能不能这样定义的方法?如果我要返回这些参数的话,方法的返回类型应该用什么?或者有没有其他办法可以这样传递参数?? 解决方案 解决方案二:参数类型当然没限制了你返回啥类型就定义啥类型好了解决方案三:可以的.如果需要灵活的话,可以用publiccanshu_jisuan(paramsobject[]i

浅谈C#中的ref和out参数

很多初学者(甚至是工作一定时间的开发人员),在遇到ref或者out参数时,总会有点"晕乎乎"或者疑惑,也不知道到底该在啥时候,啥场景下使用ref或者out参数. 本文将通过实例和说明,给大家详细讲解C#中的ref和out参数. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace RefAndOut { class Program { static