首页 >后端开发 >C++ >C# 数组和列表是按值传递还是按引用传递?

C# 数组和列表是按值传递还是按引用传递?

DDD
DDD原创
2025-01-10 11:45:42811浏览

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