1. 程式人生 > >C# 二十四、值傳遞與引用傳遞

C# 二十四、值傳遞與引用傳遞

值傳遞

  • 使用值傳遞時,向形式引數傳遞的是實在引數的副本,方法內發生的對形式引數的更改對實在引數本身沒有任何影響。

程式碼示例:

        static void Main(string[] args)
        {
            int i = 0;

            Console.WriteLine(FunctionA(i)); ---> 1
            Console.WriteLine(i);            ---> 0

            Console.ReadKey();    
        }

        static int FunctionA(int i)
        {
            i = 1;
            return i;
        }

引用傳遞

  • 使用ref或out關鍵字宣告通過引用傳遞方式傳遞引數,把實在引數的地址傳給形式引數,形參和實參指向同一個儲存單元,對形參的改變就是對實參的改變。
  • ref與out的區別在於:ref要求引數在傳遞之前必須初始化,out不要求初始化,但要在方法中完成初始化。

程式碼示例:

        static void Main(string[] args)
        {
            int i = 0;

            Console.WriteLine(FunctionA(ref i)); ---> 1

            Console.WriteLine(i);                ---> 1

            Console.ReadKey();
        }

        static int FunctionA(ref int i)
        {
            i = 1;
            return i;
        }
        static void Main(string[] args)
        {
            int i;

            Console.WriteLine(FunctionA(out i)); ---> 1

            Console.WriteLine(i);                ---> 1

            Console.ReadKey();
        }

        static int FunctionA(out int i)
        {
            i = 1;
            return i;
        }

引數分類:值引數/引用引數(ref)/輸出引數(out)