我們只需要知道一點,out經常用在多個引數的輸出
ref用在資料的雙向傳遞就好了
public string GetString()
{
return "Hello,World!";
}
var s=GetString();
這是一個簡單輸出string的方法,但是隻輸出了一個引數
我們輸出兩個引數或者多個引數也會用到列舉,元組,列表,陣列
雖然列舉,元組,列表,陣列能輸出多個引數,但是它們要進行相應的轉化和賦值
使用out就比較簡單了
public void GetString(out int a,out int b)
{
a=1,b10;
}
int a,b;
GetString(out a,out b);
Console.WriteLine(a);
Console.WriteLine(b);
我們現在嘗試同時使用ref和out寫一個demo
public class RefDemo
{
public void UsageInt(ref int a, ref int b)
{
a = 1; b = 999;
}
public void UsageString(ref string a, ref string b)
{
a = "123";
b = "321";
}
}
public class OutDemo
{
public void UsageInt(out int a,out int b)
{
a = 1;b = 999;
}
public void UsageString(out string a,out string b)
{
a = "123";
b = "321";
}
}
public static void UsageOut()
{
OutDemo outDemo = new OutDemo();
int a, b;
outDemo.UsageInt(out a, out b);
Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine("======================");
string a2, b2;
outDemo.UsageString(out a2, out b2);
Console.WriteLine(a2);
Console.WriteLine(b2);
}
public static void UsageRef()
{
RefDemo refDemo = new RefDemo();
int a=0, b=0;
refDemo.UsageInt(ref a, ref b);
Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine("======================");
string a2="", b2="";
refDemo.UsageString(ref a2, ref b2);
Console.WriteLine(a2);
Console.WriteLine(b2);
}
輸出結果
1
999
======================
123
321
從上面的demo可以看出,我們使用兩個關鍵字除了最開始初始化不同,其他的結果都一樣
其中out關鍵字可以看作ref的子集,out比ref關鍵字強大,因為它不需要初始化,
但是這是假相,沒有很好的體現出ref的作用,我這裡寫這兩個demo,是先讓你們熟悉這兩個關鍵字的用法
接下來我們看看兩個關鍵字的區別
public static void Ref()
{
int number = 10;
Console.WriteLine("原始值: " + number);
ModifyNumberFromRef(ref number);
Console.WriteLine("修改後的值: " + number);
number = 100;
Console.WriteLine("再次修改原始值: " + number);
ModifyNumberFromRef(ref number);
Console.WriteLine("再次修改後的值: " + number);
}
static void ModifyNumberFromRef(ref int num)
{
num *= 2;
Console.WriteLine("在方法內部修改後的值: " + num);
}
public static void Out()
{
int number = 10;
Console.WriteLine("原始值: " + number);
ModifyNumberFromOut(out number);
Console.WriteLine("修改後的值: " + number);
number = 100;
Console.WriteLine("再次修改原始值: " + number);
ModifyNumberFromOut(out number);
Console.WriteLine("再次修改後的值: " + number);
}
static void ModifyNumberFromOut(out int num)
{
num= 100;
num *= 2;
Console.WriteLine("在方法內部修改後的值: " + num);
}
輸出結果
原始值: 10
在方法內部修改後的值: 20
修改後的值: 20
再次修改原始值: 100
在方法內部修改後的值: 200
再次修改後的值: 200
-------------------------
原始值: 10
在方法內部修改後的值: 200
修改後的值: 200
再次修改原始值: 100
在方法內部修改後的值: 200
再次修改後的值: 200
透過輸出我們可以很明顯看出兩個關鍵字的區別