思考下面的代码会输出什么值。
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修饰的参数在传递之前可以不初始化。