在C#中,有四種傳遞參數方式:
1. 傳值 (value) : 無額外修飾符
2. 傳址(reference) : 需修飾符Ref,傳入函數的參數必須先賦值
3. 輸出參數(output): 需修飾符out,適用於return多個返回值,必須在方法中賦值
4.數組參數 (array):需修飾符params
引用網上一段話:ref 是有進有出(進時需賦值,內部可以修改,並且修改後的值函數結束後仍將保留)
而out是隻出不進 (外部即便賦值,也不會傳入函數內,編譯器將提示該參數未被初始化,在函數內必須賦值,修改後和Ref參數一樣,其值將保留)
class Program { static void Main(string[] args) { int m = 0;// ref 參數使用前必須初始化賦值 int k=100; // out 參數使用前不用初始化賦值,即便初始化,當使用out引用後,編譯器仍將認爲其未初始化 MessageBox.Show(k.ToString()); //返回100 MessageBox.Show(RefValue(1, ref m).ToString());//返回1 MessageBox.Show(m.ToString());//返回222 MessageBox.Show(OutValue(1, out k).ToString());//返回223 MessageBox.Show(k.ToString());//返回222 } private static int RefValue(int i, ref int j) { int k = j; j = 222; return i + k; } private static int OutValue(int i, out int j) { //int k = j; //即便在外部定義了j=100 ,但任然無法使用,編譯器提示未初始化 j = 222; return i + j; } }
傳值參數在方法中如果改變了參數的值,其改變後的值只能在方法內使用,方法調用完成後參數只會保留原來傳入時的值。
通過以上測試,可以看到out 和ref 應用駿相當於傳遞指針,故其修改將直接修改原參數的值。
網上看到:http://greatverve.cnblogs.com/archive/2012/02/27/ref-out.html
屬性不是變量,不能作爲ref 和out參數傳遞,這裏記錄下來