C 中的ref和out的意義和使用方法

2021-12-29 16:36:28 字數 2189 閱讀 1842

向方法傳遞乙個實參時,對應的形參會用實參的乙個副本來初始化,不管形參是值型別(例如int),可空型別(int?),還是引用型別,這一點都是成立的。也就是隨便在方法內部進行什麼修改,都不會影響實參的值。例如,對於引用型別,方法的改變,只是會改變引用的資料,但實參本身並沒有變化,它仍然引用同乙個物件。

**如下:

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace ref_out

class program

static void main(string args)

int i = 8;

console.writeline(i);

doincrease(i);

console.writeline(i);

static void doincrease(int a)

a++;

}        執行結果如下:

若使用ref 關鍵字,向形參應用的任何操作都同樣應用於實參,因為形參和實參引用的是同乙個物件。ps:實參和形參都必須附加ref 關鍵字做為字首。

**如下:

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace ref_out

class program

static void main(string args)

int i = 8;

console.writeline(i);   // 8

doincrease(ref i);      // 實參前也必須加ref

console.writeline(i);   // 9 // ref 關鍵字使對形參的動作也應用於實參

static void doincrease(ref int a)   // 形參前必須加ref

a++;

}        執行結果如下:

ref 實參使用前也必須初始化,否則不能通過編譯。

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace ref_out

class program

static void main(string args)

int i;          // ref 實參沒有初始化,所以程式不能通過編譯

console.writeline(i);

doincrease(ref i);

console.writeline(i);

static void doincrease(ref int a)

a++;

有時我們希望由方法本身來初始化引數,這時可以使用out 引數。

**如下:

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace ref_out

class program

static void main(string args)

int i;    // 沒有初始化

// 此處i 未初始化,編譯錯誤

doincrease(out i);  // 用方法來給實參賦初值

console.writeline(i);

static void doincrease(out int a)

a = 8;  // 在方法中進行初始化

a++;    // a = 9

執行結果如下:  

C 中的ref和out的意義和使用方法

向方法傳遞乙個實參時,對應的形參會用實參的乙個副本來初始化,不管形參是值型別 例如int 可空型別 int?還是引用型別,這一點都是成立的。也就是隨便在方法內部進行什麼修改,都不會影響實參的值。例如,對於引用型別,方法的改變,只是會改變引用的資料,但實參本身並沒有變化,它仍然引用同乙個物件。如下 u...

C 中的 ref 和 out 的意義和使用方法

原文c 中的 ref 和 out 的意義和使用方法 向方法傳遞乙個實參時,對應的形參會用實參的乙個副本來初始化,不管形參是值型別 例如 int 可空型別 int?還是引用型別,這一點都是成立的。也就是隨便在方法內部進行什麼修改,都不會影響實參的值。例如,對於引用型別,方法的改變,只是會改變引用的資料...

C 中ref和out的區別

最近在許多論壇上看到關於了ref和out的區別,發現解釋的都不非常理想。現在談談我自己的理解 如下 方法引數上的 out 方法引數關鍵字使方法引用傳遞到方法的同乙個變數。當控制傳遞 用方法時,在方法中對引數所做的任何更改都將反映在該變數中。當希望方法返回多個值時,宣告 out 方法非常有用。使用 o...