方法参数ref,out的问题!

转载 2006年06月19日 11:21:00

对于值型变量作为方法参数时,可以有三种情况:
1.没有ref和out参数  (直接传值,不能改变实参)
2.使用ref参数       (引用传递,输入,可以改变实参)
3.使用out参数       (引用传递,输出,可以改变实参)

4.ref和out的区别在于一个需要初始化,另一个不需要...

例子:

例子(一)

using System;
using System.Collections.Generic;
using System.Text;

namespace TestRef
{
    class Program
    {
        static void TestRef(ref int i){i+=5;}
        static void Test(int i){i+=5;}
        static void Main(string[] args)
        {
            int i1, i2;
            i1 = 10;
            i2 = 10;
            TestRef(ref i1);//
            Test(i2);//
            Console.WriteLine("i1={0}, i2={1}", i1, i2);
            Console.ReadLine();
        }
    }
}
结果:i1=15, i2=10
分析
如果不用ref那么方法Test对实参i2的改变(i2=i2+5)到那里去了?合理的解释是,传的是一个考贝.


例子(二)

为了证明其传的是一个复制本,那么设计一个新测试如下:
using System;
using System.Collections.Generic;
using System.Text;

namespace TestRef
{
    class Program
    {
        static void TestRef(ref int i)
        {
            i += 5;
        }
        static void Test(int i)
        {
            Console.WriteLine("Test中的实参为: {0}", i);
            i += 5;
            Console.WriteLine("Test中的实参为修改后为: {0}", i);
        }
        static void Main(string[] args)
        {
            int i1, i2;
            i1 = 10;
            i2 = 10;
            TestRef(ref i1);//
            Test(i2);//
            Console.WriteLine("i1={0}, i2={1}", i1, i2);
            Console.ReadLine();
        }
    }
}
结果:
Test中的实参为: 10
Test中的实参为修改后为: 15
i1=15, i2=10

这充分说明了,再传递实参(区别于函数定义时称为"形式参数"的称法)时是传递实参的一个复制本这个复制本与实参值相等,但处于内存中不同的位置,换言之如果单独对其中任何一个进行修改,那么这种修改的影响只会对其本身产生影响而与其它任何内在位置的其自身的复制本无关!

 

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

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

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

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

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

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

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

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

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

总结: ref和out都对函数参数采用引用传递形式——不管是值类型参数还是引用类型参数,并且定义函数和调用函数时都必须显示生命该参数为ref/out形式。两者都可以使函数传回多个结果。 两者区别:...

params ref out 方法参数详解

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

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

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

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

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

C#的方法参数--params、ref、out

在学习C#的过程中,经常看到params关键字在方法的参数列表中修饰数组,那这个关键字到底是干嘛的,百度了解了一下。 C#中有三个方法参数:params、ref、out params 关键字可以指...

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

一、方法参数的类型----值类型和引用类型        当方法传递的参数是值类型时,变量的栈数据会完整地复制到目标参数中即实参和形参中的数据相同但存放在内存的不同位置。所以,在目标方法中对形参所做...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:方法参数ref,out的问题!
举报原因:
原因补充:

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