2018年5月23日 星期三

ref 與 out 修飾詞的比較

課程==>很清楚 ref 與 out 與 params

https://hiskio.com/courses/182/lectures/7099


Method中的參數種類:
1.)valued types
僅複製指定的參數值到method中,Method中的任何動作,皆不影響原始傳入的變數
Ex:
int i = 0;
Program.ValuedTypesParameter(i);

2.)Ref keyword
複製指定的參數的"位置"到method中,Method中的動作會直接更改該位置的數值
Ex:
int i2 = 0;
Program.Refkeyword(ref i2);

3.)Out keyword
先建立出變數,定義傳入method中的變數前面加上"out"關鍵字,Method執行時須對該變數有存取,執行完以後會自動把數值回傳
Ex:
int outSum = 0;
double outAvg = 0;
Program.Outkeyword(2, 3, out outSum, out outAvg);

4.)params keyword
僅可用於陣列,定義傳入method中的變數前面加上param時
使用時,輸入變數可以為null、一指定陣列、或指定的新數值(會自動將所有的數值組合成陣列並輸入於Method中)
Ex:
int[] paramsKeywordArr = {1, 2, 3};
ParamsKeyword();
ParamsKeyword(paramsKeywordArr);
ParamsKeyword(10, 9, 8);



ref 與 out 修飾詞的比較

1.方法參數宣告為ref與out時,在編譯時視為相同。
(同樣的方法,用ref ,另外一個用out並不會被視為多型)


2.ref與out,都是將參數以ByRef方式傳遞。

3.ref參數傳入方法之前,要先初始化完畢

4.out參數在方法結束之要先初始化完畢
(當呼叫宣告為out參數的方法時,不管變數有沒有初始化,都可以傳入方法中執行,
只要在方法結束前,方法內參數有初始化,就不會出現編譯錯誤。)

5.ref 不會強制要求函式內的程式,一定要修改傳入的參數,但 out

沒有留言:

張貼留言