【C#】 之 out和ref

来源:互联网 发布:爱龟吧淘宝草龟 编辑:程序博客网 时间:2024/04/29 16:23

默认传参:


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

      以下是一个小例子:

 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

0 0
原创粉丝点击