標籤:資料傳遞 alt turn sub display 交換 oid 技術分享 swa
當需要從一個方法中有多個傳回值時可以考慮使用out和ref這兩個關鍵字。下面通過代碼的方式來說明兩者的用法和不同之處。
例如現在有一個如下的Add方法,Add方法只有一個傳回值。
static int Add(int num1, int num2) { return num1 + num2; }
把這個例子修改的複雜點,現在需要有4個傳回值。這時候out關鍵字就派上用場了。
static void Maths(int num1, int num2) { int add = num1 + num2; int sub = num1 - num2; int divide = num1 / num2; int multi = num1 * num2; }
上述代碼中,我想將計算後的add,sub,divide,multi四個值均返回給調用方法。使用out關鍵字來改造這個方法。
static void Maths( int num1, int num2, out int add, out int sub, out int divide, out int multi) { add = num1 + num2; sub = num1 - num2; divide = num1 / num2; multi = num1 * num2; }
使用下面的代碼調用改造後的Maths方法
int add, sub, multi, div = 0; Maths(10, 10, out add, out sub, out multi, out div);
兩個注意點:
1. 調用方法和被呼叫者法需要傳回值的參數需要使用out修飾;
2. 在調用方法中,不需要給out參數賦值。即使賦值了,在被呼叫者法中也會被重新計算。
再來看另一個關於交換兩個數值的例子,
static void Swap(int num1, int num2) { num1 = num1 + num2; num2 = num1 - num2; num1 = num1 - num2; }
使用ref關鍵字改造這個方法,
static void Swap(ref int num1, ref int num2) { num1 = num1 + num2; num2 = num1 - num2; num1 = num1 - num2; }
在調用方法中,需要添加ref關鍵字修飾
int num1 = 10; int num2 = 20; Swap(ref num1, ref num2);
使用ref修飾的參數,會把在調用方法中的資料傳遞到被呼叫者法中。當被呼叫者法中修改了ref修飾參數的值,調用方法中的相應的參數值也會同時被修改。下面通過一張圖來表示out和ref的使用及參數關係。
總結:
當需要有多個返回參數時可以考慮使用out/ref參數;
ref資料的修改是雙向的;
out資料只從被呼叫者法傳遞至調用方法,如果調用方法給out參數賦值,被呼叫者法會忽略掉這些資料。
感謝您的閱讀~
[C#] out vs ref