C# 中out,ref,params參數的使用
阿新 • • 發佈:2018-11-26
結束 最大值 不變 ++ n) 自定義 mil 不能 可變參 C#中有三個高級參數,分別是out,ref,params:
1、out參數
- 方法使用return 只能返回一個值(一個數值或一個指針值),out參數可以幫助我們在一個方法中返回多個值,不限類型。
- 在使用out參數的時候需要註意:
- 在調用方法之前,對out參數傳遞的變量只需聲明,可以賦值也可以不賦值,賦值也會在方法中被覆蓋掉。
- 方法使用了out參數傳遞變量時,就是要返回值,所以必須在方法內為其賦值。
- 方法的參數使用out關鍵字修飾時,在調用該方法時,也要在out參數傳遞的變量前面加上out關鍵字才行。
static void Main(string[] args)
{
// 使用out參數返回一個數組的最大值、最小值
int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int max;
int min;
GetMaxMinSumAvg(nums, out max, out min);
Console.WriteLine(max);
Console.WriteLine(min);
Console.ReadKey();
}
public static void GetMaxMinSumAvg(int[] nums, out int max, out int min)
{
max = 0; // out參數傳遞的變量必須在方法內為其賦值
min = 0;
if(nums.Length > 0)
{
for (int i =0; i < nums.Length; i++)
{
if (nums[i] > max)
max = nums[i];
if (nums[i] < min)
min = nums[i];
}
}
}
- TryParse類型轉換就使用out參數返回轉換結果值:
Boolean int.TryParse(string s, out int result) // 將字符串轉換為int類型,out傳遞的變量result為轉換結果(若轉換失敗返回result為0)方法return Boolean 類型
自定義int.TryParse()方法
public static Boolean stringToInt(string s, out int result) {
try
{
result = Convert.ToInt32(s);
return true;
}
catch {
result = 0;
return false;
}
}
2、 ref參數
- ref 關鍵字,和out一樣,可以使得參數通過引用來傳遞。換句話說,ref能夠讓你直接對原來那個數進行操作,而不是將原數復制一份,對那個復制項進行操作。
- ref參數的作用:
- 與out不同的是,它可以雙向傳值,主要適用於場景內部對外部的值進行改變的情況。換句話說,ref參數側重於將一個已經初始化了的變量以參數的形式帶到一個方法中進行改變,改變完成後,再將改變後的值帶出來。
- ref的作用主要是讓值類型或string這種特殊類型的引用類型能夠像其他引用類型一樣在方法中進行了值的改變,在方法結束之後,能夠將值保存下來。
- 在使用ref參數需要註意:
- ref參數傳遞的變量在傳遞之前一定要對其進行初始化賦值。
- 方法的參數使用ref關鍵字修飾時,在調用該方法時,也要在out參數傳遞的變量前面加上ref關鍵字才行。
- 方法使用了ref參數傳遞變量時,不同於out,沒有要求一定在方法中對ref所修飾的變量進行賦值,所以可以不賦值。
static void Main(string[] args)
{
int count = 5; // ref修飾的變量,必須對其賦初值
Add(ref count);
Console.WriteLine(count);
Console.ReadKey();
}
public static void Add(ref int i){
i += 5; // 不一定要賦值
}
3、 params可變參數
-
params 關鍵字可以使得在參數個數可變處采用參數的數組型參數,比如 int sum(params int[] values)。
-
可變參數的作用:使得個數不確定的可變參數以數組的形式傳遞,適合於方法的參數個數未知的情況時,用於傳遞大量的數組集合參數。
-
可變參數在使用時需註意:
-
不允許將params修飾符與ref和out修飾符組合起來使用。
-
當方法的參數列表中有多個參數時,params修飾的參數必須放在最後,不能放在前面,以免程序不好確定參數究竟有多少個而報錯。比如:
int Sum(int initial, params int[] arr)
-
一個方法當然可以包含可變參數和不變參數,兩個可以同時使用。
-
public static int Sum(int initial, params int[] arr){
int sum = initial;
for(int i = 0; i < arr.Length; i++)
sum+=arr[i];
}
return sum;
}
C# 中out,ref,params參數的使用