天天看点

关键字ref和out

 rdf out传递是变量的内存地址。

class Program
    {
        static void Main(string[] args)
        {
            int i = 0;
            Console.WriteLine(i);
            Pass.value(i);//将i的值(数据)的副本传递给Value方法,Value方法的一切动作都是对其副本的操作,对i没有影响
            Console.WriteLine(i);//所以此处输出仍为0

            Pass.RefValue(ref i);//将i的内存地址传递给方法RefValue,RefValue方法的一切动作都是对其地址所指向的i的操作,直接影响i的值(内容)
            Console.WriteLine(i);//所以此处输出为42

            int j;
            //Pass.value(j);
            Pass.OutValue(out j);//out与ref是一样的,传递的是地址。不同是:变量j可以不做初始化就可以传递j的地址
            Console.WriteLine(j);//输出为42
            Console.ReadKey();


        }
        class Pass
        {
            public static void value(int param)//param接受i传递过来的值0,此时param的值为0
            {
                param = 42;//将42赋值给param,此时param的值为42
            }

            public static void RefValue(ref int param)//i的地址传递给param,param指向i的值(内容)
            {
                param = 42;//对param的赋值实际是对param所指向的i的值的赋值。
            }

            public static void OutValue(out int param)//传递过来j的地址,所指向的j的内存中什么也没有
            {
                param = 42;//将42放入param所指向内存中,也就是j中。
            }
        }
        //总结:rdf out传递是变量的内存地址。
    }