方法参数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

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

 

相关文章推荐

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

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

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

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

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

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

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

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

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

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

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

如果在为方法声明参数时未使用 ref 或 out,则该参数可以具有关联的值。可以在方法中更改该值,但当控制传递回调用过程时,不会保留更改的值。通过使用方法参数关键字,可以更改这种行为。 params...
  • xwygn
  • xwygn
  • 2012-03-15 17:25
  • 337

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

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

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

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

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

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

params ref out 方法参数详解

使用 params 关键字可以指定采用数目可变的参数的方法参数
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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