通常,變數作為參數進行傳遞時,不論在方法內進行了什麼操作,其原始初始化的值都不會被影響; 例如: public void TestFun1() { int arg = 10; TestFun2(arg); Console.WriteLine(arg); Console.ReadKey(); } pu ...
通常,變數作為參數進行傳遞時,不論在方法內進行了什麼操作,其原始初始化的值都不會被影響;
例如:
public void TestFun1() { int arg = 10; TestFun2(arg); Console.WriteLine(arg); Console.ReadKey(); } public void TestFun2(int x) { x++; }View Code
通過執行
test1 t = new test1();
t.TestFun1();
其結果輸出:10
那麼問題來了,如果想要操作有影響要怎麼做呢?
簡單的操作:添加ref關鍵字
public void TestFun1() { int arg = 10; TestFun2(ref arg); Console.WriteLine(arg); Console.ReadKey(); } public void TestFun2(ref int x) { x++; }View Code
執行結果:
即:形參附加ref首碼,作用於參數的所有操作都會作用於原始實參(參數和實參引用同一個對象);
out關鍵字:
為形參附加out首碼,使參數成為實參的別名。向一個方法傳遞out參數之後,必須在方法內部對其進行賦值,因此調用方法時不需要對實參進行初始化。(註:如果使用了out關鍵字,但方法內沒有對參數進行賦值,編譯器無法進行編譯)如果在調用方法前已經對實參初始化,調用方法後參數的值會發生改變,變為方法內賦的值;
public void TestFun_out1() { int arg1; int arg2 = 10; TestFun_out2(out arg1, out arg2); Console.WriteLine("arg1:{0}\narg2:{1}", arg1, arg2); Console.ReadKey(); } public void TestFun_out2(out int x , out int y) { x = 20; y = 30; }View Code
執行結果: