1. 思考
思考下面的代碼會輸出什么值。
static void Main()
{
int number = 10;
add(number);
Console.WriteLine(number);
Console.ReadLine();
}
static void add(int number)
{
number = number+number;
Console.WriteLine(number);
}
2. ref用途
ref用來修飾方法的參數(shù),被ref修飾的參數(shù)晓折,在調(diào)用的時候,會傳遞過來的是一個引用兽泄。當(dāng)在方法中修改參數(shù)時漓概,那么調(diào)用方傳遞過來的那個變量的值也會被改變。在將要調(diào)用的方法的參數(shù)中病梢,如果有ref修飾的參數(shù)胃珍,那么該參數(shù)需要在傳遞之前初始化。
看下面的例子來理解:
static void Main()
{
int x = 10;
TestRef(ref x); //傳的參數(shù)是x所在的內(nèi)存地址
Console.WriteLine(x); // 20
}
static void TestRef( ref int number1) //這里是指向值為10的內(nèi)存地址
{
Console.WriteLine("TestRef輸出"+ number1); //10
number1 += number1;
Console.WriteLine("TestRef輸出" + number1);// 20
}
3. out用途
out也是用來修飾方法的參數(shù)蜓陌,跟ref很類似
觅彰,被out修飾的參數(shù),在調(diào)用的時候钮热,會傳遞過來的是一個引用填抬。當(dāng)在方法中修改參數(shù)時,那么調(diào)用方傳遞過來的那個變量的值也會被改變隧期。在將要調(diào)用的方法的參數(shù)中飒责,如果有out修飾的參數(shù)赘娄,那么該參數(shù)可以不需要在傳遞之前初始化。
看下面的例子
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
}
4. ref和out的不同點:
ref修飾的參數(shù)在傳遞之前必須要初始化
宏蛉。
out修飾的參數(shù)在傳遞之前可以不初始化遣臼。