C# 中的引用傳遞:陣列與列表
包括 C# 在內的許多程式語言都提供引用型別和值型別。關於數組和列表的傳遞機制,一個常見的問題出現了:它們預設是按引用傳遞還是按值傳遞?
C# 中的陣列和列表
在 C# 中,陣列和列表都是引用型別。這意味著它們儲存在託管堆中,並由指標引用。傳遞引用類型時,引用本身是按值傳遞的。
預設傳遞機制
因此,在 C# 中,陣列和列表預設是按值傳遞的。這種傳遞機制意味著,在方法或函數中對傳遞的陣列或列表內容所做的任何更改都會反映在呼叫程式碼中。但是,在方法或函數中重新賦值傳遞的數組或列表,在呼叫程式碼中將不可見。
範例
考慮以下程式碼片段:
<code class="language-csharp">void Foo(int[] data) { data[0] = 1; // 更改数组内容,在调用代码中可见 } void Bar(int[] data) { data = new int[20]; // 重新分配数组,在调用代码中不可见 }</code>
使用引用傳遞最佳化效能
在某些情況下,按引用傳遞陣列或清單可以提高程式的效能。這是因為它避免了複製整個資料結構,對於大型資料集來說,這可能非常昂貴。
要按引用傳遞數組或列表,可以在宣告函數參數時使用「ref」修飾符。此修飾符明確指示引用本身將按引用傳遞,而不僅僅是其值。
範例
<code class="language-csharp">void Baz(ref int[] data) { data[0] = 1; // 更改数组内容,在调用代码中可见 data = new int[20]; // 重新分配数组,在调用代码中可见 }</code>
透過使用「ref」修飾符,「Baz」函數中對內容和陣列的重新賦值的變更都將在呼叫程式碼中可見。請記住,如果您不需要在方法或函數中修改參考本身,通常建議避免使用“ref”修飾符,因為它可能導致程式碼混淆。
以上是C# 中數組和列表如何傳遞:按引用還是按值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!