ホームページ >バックエンド開発 >C++ >C# で配列とリストはどのように渡されますか: 参照または値によって渡されますか?

C# で配列とリストはどのように渡されますか: 参照または値によって渡されますか?

DDD
DDDオリジナル
2025-01-10 10:56:42530ブラウズ

How Are Arrays and Lists Passed in C#: By Reference or By Value?

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。