Home [C# 筆記] ref 和 out 有什麼區別?
Post
Cancel

[C# 筆記] ref 和 out 有什麼區別?

refout 都是在C#中用於參數傳遞的關鍵字,它們有一些區別,主要體現在以下幾個方面:

初始值:

  • ref 關鍵字要求在傳遞給方法之前必須先為變數賦初值,也就是在方法呼叫前必須對變數進行初始化。
  • out 關鍵字不要求在傳遞給方法之前為變數賦初值,但在方法內部必須確保在使用該參數之前賦值。

ref 的範例

1
2
3
4
// ref 的範例
int x = 10;
MyMethod(ref x); // 必須在呼叫前為 x 賦值

out 的範例

1
2
3
// out 的範例
int y;
MyMethod(out y); // 不需要在呼叫前為 y 賦值

方法內部對參數的要求:

  • ref 關鍵字在方法內部不要求對變數重新賦值,但可以在方法內對其進行修改。
  • out 關鍵字在方法內部要求對變數重新賦值,因為方法內部不能使用未賦值的 out 參數。

ref 的範例

1
2
3
4
5
6
// ref 的範例
void MyMethod(ref int a)
{
  // 可以修改 a 的值
  a = a + 1;
}

out 的範例

1
2
3
4
5
6
// out 的範例
void MyMethod(out int b)
{
  // 必須在方法內部為 b 賦值
  b = 20;
}

方法呼叫時的要求:

  • 在方法呼叫時,refout 關鍵字都要求在實參和形參上都使用相同的修飾符。
1
2
3
4
5
6
7
// ref 的範例
int x = 10;
MyMethod(ref x);

// out 的範例
int y;
MyMethod(out y);

總結

總結來說,refout 都允許將參數的參考傳遞給方法,但它們在初始值和方法內部的要求上有所不同。選擇使用哪個關鍵字取決於特定的需求和設計。通常,如果方法需要從參數中取得值並可能對其進行修改,可以使用 ref;如果方法只需要傳回值,並且不關心參數的初始值,可以使用 out

C# .NET面试系列一:基础语法

This post is licensed under CC BY 4.0 by the author.