浅谈C#中参数ref和out

例子如下:我们定义一个a函数传递两个参数x和y里面进行乘法运算,X和Y都进行乘2,因为定义的void没有返回值的函数,所以不会有返回值。

static void a(int x,int y)

{

  x=x*2;

  y=y*2;

}

现在定义主函数b来调用a函数看然后看下x和y的值会不会改变,

static void b(strubg[] args)

{

  int TempNum_1=20;

  int TempNum_2=40;

  a(TempNum_1,TempNum_2);

  Console.WriteLine(TempNum_1);

  Console.WriteLine(TempNum_2);

}

这时候我们发现TempNum_1和Temp_2的值没有因为函数a而改变。

但是用ref后值会改变,传入的是数组的时候也会改变,这是为什么呢,因为ref传入的是变量的内存地址,改变后内存地址的值变了,所以他也会变 out也是一样的,

不通的是out可以不管你主函数中定义的值是多少,返回的值是被调函数计算完的,主函数可以不给out参数赋值也可以的。而ref必须赋值。

这就是ref和out的用处和区别

下面是我写的小例子 大家有兴趣的话可以运行下。。。(控制台程序)

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

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 3;
            int b = 4;
            Console.WriteLine("a:\t"+a+"b:\t"+b);
            Bigger(ref a,b);
            Console.WriteLine("a:\t" + a + "b:\t" + b);

            int[] Newstr = { 1, 2, 3, 4, 5 };
            Console.WriteLine("没有调用函数之前各元素值是:");
            foreach (int element in Newstr) 
            {
                Console.WriteLine(element);
            }
            Console.WriteLine("调用函数之后各元素值是:");
            ArrayStr(Newstr);
            foreach (int element in Newstr)
            {
                Console.WriteLine(element);
            }            
            Console.ReadKey();
        }

        static void Bigger(ref int x,int y)
        {
            x = 2 * x;
            y = 2 * y;
        }
        static void ArrayStr(int[] ArrayString)
        {
            for (int i=0; i < ArrayString.Length; i++)
            {
                ArrayString[i] = 2 * ArrayString[i];
            }
        }
    }
}

 

posted on 2013-01-29 21:58  PLAY_NET  阅读(79)  评论(0)    收藏  举报

导航