ref和out關鍵字
阿新 • • 發佈:2018-11-19
實參跟形參(引用傳遞引數跟值傳遞引數)
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引數時,該引數必須看作是還未賦值的。