C# Ref 與out 的區別

在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參數傳遞,這裏記錄下來

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章