ref和out的区别

 

  ref类型参数是按地址传递,能改变原来的数值。使用ref传参前,变量必须赋值。

  带有ref类型参数的函数,不会清空变量,所以离开该函数的时候,所有ref引用的变量可以赋值也可以不赋值。

 

  out类型参数是按地址传递,能改变原来的数值。使用out传参前,对变量可以赋值也可以不赋值。

  带有out类型参数的函数,会清空变量,所以在离开该函数的时候,所有out引用的变量都要赋值。

 

internal static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        private static void Main()
        {
            //                                   ref和out的区别

            //ref类型参数是按地址传递,能改变原来的数值。使用ref传参前,变量必须赋值。

            //带有ref类型参数的函数,不会清空变量,所以离开该函数的时候,所有ref引用的变量可以赋值也可以不赋值。

            int j = 34;
            int k = 51;
            Console.WriteLine("c={0};d={1}", j, k);
            SwapObj<int>.Swap(ref j, ref k);
            Console.WriteLine("c={0};d={1}", j, k);

            //out类型参数是按地址传递,能改变原来的数值。使用out传参前,对变量可以赋值也可以不赋值。

            //带有out类型参数的函数,会清空变量,所以在离开该函数的时候,所有out引用的变量都要赋值。

            int m;
            string n;
            SwapObjm.Swap(out m, out n );
            Console.WriteLine("c={0};d={1}", m, n);

        }

        public static class SwapObj<T>
        {
            public static void Swap(ref T a, ref T b)
            {
                T tmp = a;
                a = b;
                b = tmp;
            }

        }

        public sealed class SwapObjm
        {
            public static void Swap(out int a, out string b)
            {
                a = 100;
                b = "abc";
            }
        }
    }
posted @ 2015-05-20 12:32  滕广  阅读(221)  评论(0编辑  收藏  举报