首頁 >後端開發 >C++ >C# 陣列和列表是按值傳遞還是按引用傳遞?

C# 陣列和列表是按值傳遞還是按引用傳遞?

DDD
DDD原創
2025-01-10 11:45:42812瀏覽

Are C# Arrays and Lists Passed by Value or by Reference?

C# 中數組和列表:按引用傳遞還是按值傳遞?

在 C# 中,陣列和列表採用按值傳遞的方式。這意味著當您將這些資料結構作為參數傳遞給方法或函數時,只傳遞對它們的參考的副本。

以數值傳遞:

在 .NET 中,陣列和列表是儲存在堆上的物件。當這些物件作為參數傳遞時,會複製它們在記憶體中位置的參考。這表示對陣列或清單內容所做的任何變更都可被呼叫方觀察到。但是,如果您重新指派數組或清單本身(即變更引用),則呼叫方將無法偵測到這些變更。

範例:

<code class="language-c#">void Foo(int[] data)
{
    data[0] = 1; // 调用方可以看到此更改
}
void Bar(int[] data)
{
    data = new int[20]; // 调用方看不到此更改
}</code>

使用 ref 進行按引用傳遞:

如果您需要呼叫方同時觀察內容變更和參考重新分配,則可以使用 ref 修飾符。這將按引用傳遞引用,確保對引用本身所做的任何修改都對呼叫方可見。

使用 ref 的範例:

<code class="language-c#">void Foo(ref int[] data)
{
    data[0] = 1; // 调用方可以看到此更改
    data = new int[20]; // 调用方也可以看到此更改
}</code>

因此,在 C# 中,陣列和清單預設會按值傳遞。如果您希望按引用傳遞參考本身,可以修改方法的簽名以包含 ref 修飾符。

以上是C# 陣列和列表是按值傳遞還是按引用傳遞?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn