C#之ref和out

思考下面的代码会输出什么值。

 static void Main()
        {
            int number = 10;
            add(number);
            Console.WriteLine(number);
            Console.ReadLine();
        }

        static void add(int number)
        {
            number = number+number;

            Console.WriteLine(number);
        }
ref用途

ref用来修饰方法的参数,被ref修饰的参数,在调用的时候,会传递过来的是一个引用。当在方法中修改参数时,那么调用方传递过来的那个变量的值也会被改变。在将要调用的方法的参数中,如果有ref修饰的参数,那么该参数需要在传递之前初始化。
看下面的例子来理解:

        static void Main()
        {
            int x = 10;
            TestRef(ref x); //传的参数是x所在的内存地址
            Console.WriteLine(x); // 20
        }

        static void TestRef( ref int number1) //这里是指向值为10的内存地址
        {
            Console.WriteLine("TestRef输出"+ number1); //10
            number1 += number1;
            Console.WriteLine("TestRef输出" + number1);// 20
        }
out用途

out也是用来修饰方法的参数,跟ref很类似,被out修饰的参数,在调用的时候,会传递过来的是一个引用。当在方法中修改参数时,那么调用方传递过来的那个变量的值也会被改变。在将要调用的方法的参数中,如果有out修饰的参数,那么该参数可以不需要在传递之前初始化。
看下面的例子

        static void Main()
        {
            int y;
            TestOut(out y);
            Console.WriteLine(y); //30

            Console.ReadLine();
        }

        static void TestOut(out int number1)
        {
            number1 = 30;
            Console.WriteLine("TestOut输出" + number1); // 30
        }
ref和out的不同点:

ref修饰的参数在传递之前必须要初始化
out修饰的参数在传递之前可以不初始化

你可能感兴趣的:(C#之ref和out)