C Out Ref關鍵字的理解和區別

2021-06-08 21:21:20 字數 1127 閱讀 1306

ref是傳遞引數的位址,out是返回值,兩者有一定的相同之處,不過也有不同點。使用ref前必須對變數賦值,out不用。

out的函式會清空變數,即使變數已經賦值也不行,退出函式時所有out引用的變數都要賦值,ref引用的可以修改,也可以不修改。

如果你想返回多個值怎麼辦,out....

區別可以參看下面的**:

class program

;b=", a, b);

int c = 11, d = 22;

outtest(out c, out d);

console.writeline("c=;d=", c, d);

//ref test

int m, n;

//reftest(ref m, ref n);

//上面這行會出錯,ref使用前,變數必須賦值

int o = 11, p = 22;

reftest(ref o, ref p);

console.writeline("o=;p=", o, p); }

static void outtest(out int x, out int y)

static void reftest(ref int x, ref int y) }

ref和out都是c#中的關鍵字,所實現的功能也差不多,都是指定乙個引數按照引用傳遞。對於編譯後的程式而言,它們之間沒有任何區別,也就是說它們只有語法區別。總結起來,他們有如下語法區別:

1、ref傳進去的引數必須在呼叫前初始化,out不必,即:

int i;

somemethod( ref i );//語法錯誤

somemethod( out i );//通過

2、ref傳進去的引數在函式內部可以直接使用,而out不可:

public void somemethod(ref int i)

public void somemethod(out int i)

3、ref傳進去的引數在函式內部可以不被修改,但out必須在離開函式體前進行賦值。

總結:應該說,系統對ref的限制是更少一些的。out雖然不要求在呼叫前一定要初始化,但是其值在函式內部是不可見的,也就是不能使用通過out傳進來的值,並且一定要賦乙個值。也就是說函式承擔初始化這個變數的責任。

C out ref關鍵字的用法和區別

其次 ref可以把引數的數值傳遞進函式,但是out是要把引數清空,就是說你無法把乙個數值從out傳遞進去的,out進去後,引數的數值為空,所以你必須初始化一次。這個就是兩個的區別,或者說就像有的說的,ref是有進有出,out是只出不進。out class program out傳入後需要賦值才能返回...

this關鍵字理解

public class test implements runnable synchronized void m1 throws interruptedexception synchronized void m2 throws interruptedexception override publi...

this關鍵字的理解

test type button value 按鈕 onclick test function test 使用標籤屬性註冊事件 此時this 指向的是 window 物件 使用 addeventlistener 等註冊。此時this 也是指向 input document.getelementbyi...