ref是什么意思

问题描述

staticvoidexchang(refintnumber1,refintnumber2){inttemp=number2;number2=number1;number1=temp;}这段代码的ref不知道有什么作用,求大神解答..

解决方案

解决方案二:
ref引用传值,即方法中可直接修改参数的值
解决方案三:
ref就类似于c语言里面的指针
解决方案四:
ref只的是按引用方式传递参数具体参考中文的:
解决方案五:
ref修饰的参数,你在函数内修改它,会作用到调用者的实际参数上。
解决方案六:
ref是从传统的c语言借用过来的概念,这是c#从一开始就有的(vb.net也从一开始就有)。不过.net跟c语言处理机制并不一样,因此这个词儿其实是有歧义的。在.net中,按引用传递参数是指,当exchang方法执行完毕时,.net把栈中的两个参数弹出时会重新赋值给number1和number2。而如果是按值传递参数,是指从栈中弹出的参数就丢弃了、不再赋值了。这里实际上根本没有c的那种传递地址(或者说引用)的实质,只不过是c#从一开始就借用那个类似的词儿而已。如果不理解内部机制,就会产生歧义。例如在c中为了对自定义对象参数化进行性能优化,采用了传送地址的方式;而在.net中,实际上传值反而是比传引用快,传引用反而是慢的。因此不能把.net用c语言的概念随便硬套,否则就会误解.net机制。
解决方案七:
换句话说,假设在参数中传送引用类型对象时(而不是像你的例子这样传int值类型对象),那么.net天生就是传引用的。因此.net所说的“传值方式”其实就是传送引用,就是“把对象的引用的值”传送;而.net所说的“传引用方式”,则可以看作对对象的引用再传引用。这就是.net跟c系列的参数传送方式完全不同的地方。
解决方案八:
实际上,如果今天的知识可以带回到2001年以前,我相信.net设计值(c#设计值)可能会把这个关键字重新设计为“有副作用的”或者“可返回的”之类的关键字,改一两个字母就会让它更加明白和准确。而决不需要用c语言指针来解释它。
解决方案九:
staticvoidMain(string[]args){intmy_number1=100;intmy_number2=200;exchange(refmy_number1,refmy_number2);//函數執行過結果,兩個變量的變化,可帶到主函數Console.WriteLine(“my_number1:”+my_number1.ToString());//輸出200Console.WriteLine(“my_number2:”+my_number2.ToString());//輸出100Console.ReadKey();}staticvoidexchange(refintnumber1,refintnumber2){inttemp=number2;number2=number1;number1=temp;}

时间: 2024-09-10 20:11:32

ref是什么意思的相关文章

关于ref、out和params参数的理解

using System; namespace TestCS{ /// <summary> /// Class1 的摘要说明. /// 本代码演示了ref,out和params关键字在函数参数传递中的作用 /// </summary> class Class1 {  /// <summary>  /// 应用程序的主入口点.  /// </summary>  [STAThread]  static void Main(string[] args)  {   

C#中ref和out的使用小结

ref是传递参数的地址,out是返回值,两者有一定的相同之处,不过也有不同点. 使用ref前必须对变量赋值,out不用. out的函数会清空变量,即使变量已经赋值也不行,退出函数时所有out引用的变量都要赋值,ref引用的可以修改,也可以不修改. 区别可以参看下面的代码: using System;class TestApp{ static void outTest(out int x, out int y) {//离开这个函数前,必须对x和y赋值,否则会报错. //y = x; //上面这行会

c#中ref和out参数使用时需要注意的问题

问题 昨天写了个关于socket接收udp包的程序,调用了socket.ReceiveFrom方法,发现了一个c#中关于ref和out参数传递时的问题,这里提出来和大家共同探讨一下,首先声明,下面的结论都是本人推测,还没有得到任何定论,若有错误请大家指正. 首先,ReceiveFrom方法的原型为 public int ReceiveFrom(byte[], ref EndPoint); 有一个为ref的EndPoint参数,用它来返回收到包的源地址信息,ref的语义是传引用,即对所传引用的修改

如何使用REF CURSOR处理Oracle的结果集

Oracle提供REF CURSOR,通过该功能可以实现在程序间传递结果集的功能,利用REF CURSOR也可以实现BULK SQL,从而提高SQL性能. 使用scott用户的emp表实现以下测试案例: SQL> desc emp Name Null? Type ----------------------------------------- -------- ---------------------------- EMPNO NOT NULL NUMBER(4) ENAME VARCHAR

Oracle 10g Release2新功能之Ref Cursor

Ref Cursor就是我们定义在服务器端的结果集的reference. 当我们打开一个Ref Cursor的时候,没有任何的数据返回到客户端,相反,数据在服务器上的地址将会被返回到客户端.这样用户就可以自己决定什么时间和以那种方式通过Ref Cursor去取数据. 在以前版本的ODP.NET中,我们可以通过Ref Cursor取数据,但是我们不能把Ref Cursor作为一个Input参数传递给PL/SQL的存储过程和存储函数.但是在Oracle Database 10g Release2,我

输出参数out和引用参数ref区别

使用ref的一段代码 using System; class M { public void F(ref int i) { i=3; } } class Test { int i=0; //要作为引用参数传递的变量必须明确赋值 static void Main() { //不能把int i=0;放在这里赋值,会报错说Test不包含i定义. Test t=new Test(); Console.WriteLine("the value of i is:{0}",t.i); M mm=ne

理解C#的Ref和Out关键字

类型介绍 在几乎所有的OOP语言中,都存在2种类型的值. 值类型 引用类型 以C#为例:其值类型为sbyte,byte,char,short,ushort,int,uint,long和ulong,float和double,当然还有decimal和bool.而引用类型则是string和object. 我想说的 我想说的就是--Ref和Out把我弄糊涂的原因是,当时没有认真的去分析它对不同类型所做出的不同的动作. 对于值类型. 使用了Ref和Out的效果就几乎和C中使用了指针变量一样.它能够让你直接

C#中的ref关键字

最近有人问到 ref 关键字的正确用法,下面我们来举例说明.其实要更好的理解 ref 关键字,结合 C++ 代码更加容易一些.另外在开始我们的例子之前,需要提前说明几点: C# 中的数据有两种类型:引用类型(reference types)和值类型(value types). 简单类型(包括int, long, double等)和结构(structs)都是值类型,而其他的类都是引用类型. 简单类型在传值的时候会做复制操作,而引用类型只是传递引用,就像 C++ 中的指针一样. 注意 structs

C#中ref和out使用小结

ref是传递参数的地址,out是返回值,两者有一定的相同之处,不过也有不同点. 使用ref前必须对变量赋值,out不用. out的函数会清空变量,即使变量已经赋值也不行,退出函数时所有out引用的变量都要赋值,ref引用的可以修改,也可以不修改. 区别可以参看下面的代码: using System; class TestApp { static void outTest(out int x, out int y) {//离开这个函数前,必须对x和y赋值,否则会报错. //y = x; //上面这

解析.net中ref和out的实质

可能是.net中的value type和reference type的关系遇到给函数传递参数的情况时, 在我们的脑海里就会浮现按值和按引用传递的概念.如果看见下面这个函数(代码1)我 们就会条件反射似的说要给参数加上ref才能使函数内部修改参数的值. //代码1 void Change(int a, int b) { int tmp = a; a = b; b = tmp } ok,那继续看下面这个代码 //代码2 void Change2(object o) { o = new object(