方法参数:值参数、引用参数、输出参数 -- ref out

转载 2011年01月23日 12:35:00

一、參數的使用方法:
    1、值參數(Value Parameter )
        格式:方法名稱(參數類型 參數名稱[,參數類型 參數名稱])

    2、引用參數(Reference Parameter )
        格式:方法名稱(ref 參數類型 參數名稱[,ref 參數類型 參數名稱])

    3、輸出參數(Out Parameter)
        格式:方法名稱(out  參數類型 參數名稱[,out  參數類型 參數名稱])

二、值參數與引用參數及輸出參數的區別:
    2.1 值參數中實參的值不隨形參值變更而變更;
          形參與實參值互不影響,實參傳遞給形參時,堆棧中就為其分配另外一部分空間。這樣,兩個參數變更時而互不影響。
    2.2 引用參數及輸出參數中實參的值會隨形參值變更而變更
         (形參:在定义函数中指定的形参,在未出现函数调用时,它们并不占内存中的存储单元.只有在发生函数调用时,函数中形参才被分配内存单元.在调用结束后,形参所占的内存单元也被释放。调用时将实参的值赋绐形参);
          引用參數與輸出參數中,實參在堆棧中分配空間。當實參傳遞給形參時,會將地址傳遞給形參,即傳送的是指針,這樣形參變更時,實參也會隨著變更。

三、引用參數與輸出參數區別:
     3.1 使用ref與out參數時,方法中參數及調用參數都需要加Ref或out關鍵字
     3.2 使用ref參數與out參數得到的結果是一樣的,區別是:ref在調用前需給調用方法中的參數賦初值。out在調用前不需給調用方法中的參數賦初值,參數在實際方法體中初始化。

四:查看代碼

如:下面代碼中各個參數的結果:
using System;
class mahod
{
    public static void ValueMethod(int i)
    {
        i++;
    }
    public static void ReferenceMehtod(ref int i)
    {
        i++;
    }
    public static void OutMethod(out int j)
    {
        j=0;
        j++;
    }
   
    static void Main()
    {
        int i=0;
        ValueMethod(i);
        Console.WriteLine("i="+i);
        int j=0;
        ReferenceMehtod(ref j);
        Console.WriteLine("j="+j);
        int k;
        OutMethod(out k);
        Console.WriteLine("k="+k);
       
        Console.ReadLine();
    }
}

     有时,我们需要改变原来变量中的值,这时,我们可以向方法传递变量的引用,而不是变量的值.引用是一个变量,他可以访问原来变量的值,修改引用将修改原来变量的值.变量的值存储在内存中,可以创建一个引用,他指向变量在内存中的位置.当引用被修改时,修改的是内存中的值,因此变量的值可以将被修改.当我们调用一个含有引用参数的方法时,方法中的参数将指向被传递给方法的相应变量,因此,我们会明白,为什么当修改参数变量的修改也将导致原来变量的值.

 private int r1(int i)
{
      i = i * i;
      return i;
}

private int r2(ref int i) //引用参数
{
      i = i * i;
      return i;
}

//调用:
int m = 3; //必须赋值
int n = 0; //可以不赋值 int n;
n = r1(m); //m=3 n=9

n = r2(ref m); //m=9(被修改了) n=9
//ref参数之前必须先赋值


//out:
private void  r1(int i,out int j,out int k) //private void  r1(ref int i,out int j,out int k)
{
      j=i*10;
      k = j * 20;
}

//调用:
int x = 1;//必须赋值
int y = 0;//or:int y; 可以不赋值
int z = 0;//or:int z;可以不赋值
r1(x, out y, out z); //x=1  y=10  z=200


//ref和out的区别:
1、ref和out似乎可以实现相同的功能.因为都可以改变传递到方法中的变量的值.
     但是,二者本质本质的区别就是,ref是传入值,out是传出值.

2、ref参数之前必须先赋值

3、在含有out关键字的方法中,out变量必须由该方法参数中非out(可以是ref)变量赋值或者由全局变量赋值。

4、out的宗旨是保证每一个传出变量都必须被赋值。

5、out参数在调用方法前可以不初始化变量。

6、而ref参数,在传递给方法时,就已经是含有值的了,所以ref侧重修改.out侧重输出。

 


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mubingyun/archive/2009/01/06/3711027.aspx

相关文章推荐

黑马程序员-在方法中传参数 out ref

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------     在方法后面的括号内定义变量...

方法参数修饰符ref和out的区别

out和ref 1)out和ref传变量的地址(引用地址),形参改变,实参也改变。因为他们都是引用一个地址的; 2)带ref和out修饰的参数只能传递变量不能传递常量. 3)out和ref的区别...

方法参数params ref out用法和示例

params 关键字可以指定采用数目可变的参数的方法参数 。可以发送参数声明中所指定类型的逗号分隔的参数列表或指定类型的参数数组。还可以不发送参数。 在方法声明中的 params 关键字之后不允许任...

C# 参考之方法参数关键字:params、ref及out

C# 参考之方法参数关键字:params、ref及out 如果在为方法声明参数时未使用 ref 或 out,则该参数可以具有关联的值。可以在方法中更改该值,但当控制传递回调用过程时,不会保留更改...

C#中方法参数 ref 与 out 的区别

方法中参数的类型有三种 in型参数 in型参数通过值传递的方式将数值传入方法中。即我们在Java中常见的方法 ref型参数 该种类型的参数传递变量地址给方法(引用传递),传递前变量必须初始化。 ...

params ref out 方法参数详解

使用 params 关键字可以指定采用数目可变的参数的方法参数
  • wxlinsr
  • wxlinsr
  • 2014年05月22日 16:02
  • 488

方法参数关键字:params、ref及out

如果在为方法声明参数时未使用 ref 或 out,则该参数可以具有关联的值。可以在方法中更改该值,但当控制传递回调用过程时,不会保留更改的值。通过使用方法参数关键字,可以更改这种行为。 params...
  • cpcpc
  • cpcpc
  • 2011年09月05日 16:09
  • 446

(C#)方法参数关键字:ref、out、params详解

备注:以下来自MSDN和网络参考,经过整理后的文档 ref(C# 参考) ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数的任何更改都将反映在该变量中。若要使用 ...

c# 方法参数(传值,传引用,ref,out,params,可选参数,命名参数)

一、方法参数的类型----值类型和引用类型        当方法传递的参数是值类型时,变量的栈数据会完整地复制到目标参数中即实参和形参中的数据相同但存放在内存的不同位置。所以,在目标方法中对形参所做...

unity3D-游戏/AR/VR在线就业班 C#入门方法参数学习笔记

unity3D-游戏/AR/VR在线就业班 C#入门方法参数学习笔记
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: 方法参数:值参数、引用参数、输出参数 -- ref out
举报原因:
原因补充:

(最多只允许输入30个字)