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中文网其他相关文章!