在C#中,若要將方法參數以Call by Reference的方式傳遞
不論是在方法定義或者呼叫方法時,都必須要在該參數的前頭加上 ref 或 out 這兩個修飾詞。
這兩個修飾詞的差別在於:
1. 冠上ref的參數必須在傳遞參數前先初始化變數,冠上out修飾詞的變數則不需要
2. 冠上out的參數雖然不需要事先初始化,但需要在方法傳回之前指派其變數值
以下舉幾個簡單例子來幫助理解 out修飾詞的用法:
(一) 方法定義與呼叫
class Program
{
static void Method(out int i)
{
i = 45;
}
static void Main(string[] args)
{
int value;
Method(out value);
Console.WriteLine("Value: {0}", value);
Console.ReadLine();
}
}
上述程式將會在Console中印出 Value: 45 的結果
可以看到在宣告方法跟呼叫方法時都必須要將Call By Reference的參數冠上out修飾詞
否則程式將出錯,其中該變數並不須事先指派變數值
(同樣的宣告方式若使用ref修飾詞將出錯)
另外由於是Call By Reference,因此方法內對於value變數值的變更將會直接影響到
外面的value變數,因此直接印出value就可以看到變更後的數值。
(二) out使用時機: 讓一個方法有多個return值
直接參考MSDN提供的例子來做說明,程式碼如下:
class Program
{
static void MultiReturnMethod(out int i, out string s1, out string s2)
{
i = 50;
s1 = "Second Parameter";
s2 = "Third Parameter";
}
static void Main(string[] args)
{
int value;
string str1, str2;
MultiReturnMethod(out value, out str1, out str2);
Console.WriteLine("Return Three Parameters: {0} {1} {2}", value, str1, str2);
Console.ReadLine();
/*
* Output:
* Return Three Parameters: 50 Second Parameter Third Parameter
*/
}
}
藉由輸出結果可以看到原先宣告的三個變數皆已受到方法內指派變數值的影響
以上簡單筆記一下 :)
Reference:
1. https://msdn.microsoft.com/zh-tw/library/t3c3bfhx(v=vs.120).aspx
2. https://msdn.microsoft.com/zh-tw/library/14akc2c7(v=vs.120).aspx
沒有留言:
張貼留言