ref與out的區別 反彙編篇

2022-04-30 14:30:11 字數 1376 閱讀 7894

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace refout

,y=",x,y);

tp.changewithoutref(x,y);

console.writeline("沒加ref的change之後:");

console.writeline("x=,y=", x, y);

tp.changewithref(ref x,ref y);

console.writeline("加ref的change之後:");

console.writeline("x=,y=", x, y);

console.readkey();}}

public class testparams

public void changewithref(ref int32 a,ref int32 b) }}

執行後,程式斷下,按除錯-->視窗-->反彙編進入相應方法的反彙編視窗,我們會看到:

對於方法 changewithoutref

--- d:\使用者目錄\documents\visual studio 2010\projects\refout\refout\program.cs -----

public void changewithoutref(int32 a,int32 b)

0000004a  nop

0000004b  lea         esp,[ebp-0ch]

0000004e  pop         ebx

0000004f  pop         esi

00000050  pop         edi

00000051  pop         ebp

00000052  ret         4

而對於方法changewithref

--- d:\使用者目錄\documents\visual studio 2010\projects\refout\refout\program.cs -----

public void changewithref(ref int32 a,ref int32 b)

00000057  nop

00000058  lea         esp,[ebp-0ch]

0000005b  pop         ebx

0000005c  pop         esi

0000005d  pop         edi

0000005e  pop         ebp

0000005f  ret         4

ref與out的區別

總結以上四條得到ref和out使用時的區別是 ref指定的引數在函式呼叫時候必須初始化,不能為空的引用。而out指定的引數在函式呼叫時候可以不初始化 out指定的引數在進入函式時會清空自己,必須在函式內部賦初值。而ref指定的引數不需要。class program y x,y console.rea...

ref與out的區別

ref static void main string args static void add int num1,int num2 輸出5static void main string args static void add ref int num1,ref int num2 加上ref輸出15...

ref與out的區別

若要使用ref引數,方法定義和呼叫方法均必須顯式使用ref關鍵字,如下面的示例所示。class refexample static void main out.out的使用 class program firstname strarray 0 lastname strarray 1 static v...