這篇主要介紹的是在Method中常用到的幾個修飾詞,params, ref, out:
1. 一個Method只能使用一次params
2. params必須加在Method的參數宣告列裡
3. params只能夠加在參數宣告列中最後的Array Type 參數前(意思為宣告params的參數後面不能有其他參數)
4. params只能加在Array Type的參數
使用params的Method宣告如下:
呼叫的方式如下:
1. 傳進ref參數的引數必須要在傳入前設定初始值
2. 在Method宣告列中,使用ref的參數前須加上ref修飾詞
3. 在呼叫該方法時,ref參數的引數前要加上ref修飾詞
以下為使用ref的範例程式碼:
輸出:
以下為使用out的範例程式碼,與ref結果相同:
這邊有幾點要特別注意的是:
1. 在建立同一個Method的Overload時,out和ref會被視為相同,故無法使用Overload:
參考來源:
MSDN params (C# 參考)
MSDN out (C# 參考)
MSDN ref (C# 參考)
params
params讓使用者在傳入Array引數時能夠以多個單一型態的參數代替以Array方式傳入,增加程式的易讀性,使用params時有幾個限制條件:1. 一個Method只能使用一次params
2. params必須加在Method的參數宣告列裡
3. params只能夠加在參數宣告列中最後的Array Type 參數前(意思為宣告params的參數後面不能有其他參數)
4. params只能加在Array Type的參數
使用params的Method宣告如下:
static void TestArrayArgs(String[] arry1, params Int32[] arry2)
{
(new List(arry1)).ForEach(m => Console.WriteLine(m));
(new List(arry2)).ForEach(m => Console.WriteLine(m));
}
呼叫的方式如下:
TestArrayArgs(new String[]{ "1", "2", "3" }, 1, 2, 3);
ref
一般程式語言中常常會在Call By Value與Call By Reference之間搞混,兩者之間的差異我們在此就不多作解釋,在進行Call By Reference的操作時,就會使用到ref與out。ref如同C++中的&傳送記憶體位置一樣,傳入的變數在經過運算後,因為其記憶體位置的改變,在跳出Method返回後,他的值也會跟著改變,通常這用於一個Method想回傳多個運算結果的情況,ref在使用時有幾個限制:1. 傳進ref參數的引數必須要在傳入前設定初始值
2. 在Method宣告列中,使用ref的參數前須加上ref修飾詞
3. 在呼叫該方法時,ref參數的引數前要加上ref修飾詞
以下為使用ref的範例程式碼:
using System;
namespace MyTest
{
class Program
{
static void Main(String[] args)
{
int x = 1;
int y = 2;
ChangeValue(ref x, ref y);
Console.WriteLine("x = {0}, y = {1}", x, y);
Console.ReadLine();
}
static void ChangeValue(ref int a, ref int b)
{
a = 100;
b = -100;
}
}
}
輸出:
out
out與ref使用用法相同,差別在於傳進out參數的引數不需要再傳入前初始化,而是在Method中初始化,如果在Method中沒有初始化則會出錯,如下圖。以下為使用out的範例程式碼,與ref結果相同:
using System;
namespace MyTest
{
class Program
{
static void Main(String[] args)
{
int x;
int y;
ChangeValue(out x, out y);
Console.WriteLine("x = {0}, y = {1}", x, y);
Console.ReadLine();
}
static void ChangeValue(out int a, out int b)
{
a = 100;
b = -100;
}
}
}
這邊有幾點要特別注意的是:
1. 在建立同一個Method的Overload時,out和ref會被視為相同,故無法使用Overload:
參考來源:
MSDN params (C# 參考)
MSDN out (C# 參考)
MSDN ref (C# 參考)
留言
張貼留言