1. 程式人生 > >ref和out關鍵字

ref和out關鍵字

實參跟形參(引用傳遞引數跟值傳遞引數)

namespace ConsoleApp3
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 5;
            Console.WriteLine("第一步:"+a);
            Dou(a);
            Console.WriteLine("第三步:" + a);
            Console.ReadKey();
        }
        private static void Dou(int val)
        {
            val = val * 2;
            Console.WriteLine("第二步:" + val);
        }
    }
}

結果

從輸出的結果可以看出,a引數傳進Dou函式中,並將其翻倍,在Main函式中a的值並沒有改變,這是因為,函式引數在傳遞的時候copy複製了一個數給形參val,之後在函式裡改變val並不會影響a的值,這就是形參。

問題:那我們如何在對形參做出改變的時候也能影響原來的數的值呢?ref關鍵字

namespace ConsoleApp3
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 5;
            Console.WriteLine("第一步:"+a);
            Dou(ref a);
            Console.WriteLine("第三步:" + a);
            Console.ReadKey();
        }
        private static void Dou(ref int val)
        {
            val = val * 2;
            Console.WriteLine("第二步:" + val);
        }
    }
}

ref引數的作用是可以改變我們傳入引數原來的數值,ref關鍵字實現了引數的引用傳遞,即將存放a值的地址傳入函式中,當函式中對引數改變時,即改變了原有的值

out輸出關鍵字實現了同樣的功能

ref和out的重要區別:

1、把為負值的變數用總ref引數是非法的,但可以把未賦值的變數用作out函式;

2、在函式使用out引數時,該引數必須看作是還未賦值的。