您的位置:首页 > 编程语言 > C#

【C#】 之 out和ref

2015-12-29 12:24 369 查看

默认传参:

参数传入函数的默认行为是按值传递。传入方法中的参数是原始数据的副本。

以下是一个小例子:

public static int Add( int x, int y)
        {
        int ans=x+y;
            x=100000;
            y=800000;
            return ans;
        }

        static void Main(string[] args)
        {
            int x = 9, y = 10;
            Console.WriteLine("在调用之前:x={0},y={1}", x, y);
            
            Console.WriteLine("在调用之后:x={0},y={1},ans={2}", x, y, Add(x, y));

            Console.ReadLine ();

        }
其中我们在调用的参数中将x和y重新赋值,但它改变的只是原始数据的一个副本,所以原始数据不会产生影响。最后的结果如下





Out传参:

Out传参其实就是把参数传出去,从方法中传出去。

static void Add( out int x, int y,out int ans)
        {
            x = 100000;
            y = 800000;
            ans = x + y;
        }

        static void Main(string[] args)
        {
            int x=9; int y=10; int ans=0;
            Console.WriteLine("在调用之前:x={0},y={1},ans={2}", x, y,ans);

            Add( out x, y,out ans);

            Console.WriteLine("在调用之后:x={0},y={1},ans={2}", x,y,ans);

            Console.ReadLine();

        }


正从最后的结果可以看出只有y之没有改变,虽然y值在方法中被重新赋值了,但是它并没有传出来,所以还是原值。




Ref传参:

Ref传参是引用传参,引用参数必须在他们被传递给方法之前初始化,因为方法在退出之前必须为输出参数赋值。

static void Add(ref int x,  int y, out int ans)
        {
            x = 100000;
            y = 800000;
            ans = x + y;
        }

        static void Main(string[] args)
        {
            int x = 9; int y = 10; int ans = 0;
            Console.WriteLine("在调用之前:x={0},y={1},ans={2}", x, y, ans);

            Add(ref x,  y, out ans);

            Console.WriteLine("在调用之后:x={0},y={1},ans={2}", x, y, ans);

            Console.ReadLine();
        }


通过输出可以看到x的值已经被修改了。





总结:

通过上面的三个小例子可以看出,默认传参只是把我们的一个值的副本传递给函数方法,而函数在自己里面对值干了什么,原值是无所谓的,我们要这个方法最后return的那个结果就好了。
而out传参其实就是把函数中的参数给传出来,默认传参不是只能返回个值嘛,out就牛多了,想把哪个传回来就把哪个传回来。
至于ref传参,那就是个引用,对原值的引用,方法把原值改成什么样子就是什么样子,改了就是改了。这里有时候和out从结果上看差不多,但是不太一样,out返回来取代原来的,ref是直接就改了。
以上就是我的理解了。。

——本学习总结参考书籍为《精通C#》作者:Andrew Troelsen
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: