Rumah >pembangunan bahagian belakang >C++ >Adakah Tatasusunan dan Senarai C# Diluluskan oleh Nilai atau Rujukan?

Adakah Tatasusunan dan Senarai C# Diluluskan oleh Nilai atau Rujukan?

DDD
DDDasal
2025-01-10 11:45:42859semak imbas

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

Array dan senarai dalam C#: lulus dengan rujukan atau mengikut nilai?

Dalam C#, tatasusunan dan senarai diluluskan mengikut nilai. Ini bermakna apabila anda menghantar struktur data ini sebagai hujah kepada kaedah atau fungsi, hanya salinan rujukan kepada mereka akan dihantar.

Lulus nilai:

Dalam .NET, tatasusunan dan senarai ialah objek yang disimpan pada timbunan. Apabila objek ini diluluskan sebagai hujah, rujukan kepada lokasinya dalam ingatan akan disalin. Ini bermakna bahawa sebarang perubahan yang dibuat pada kandungan tatasusunan atau senarai boleh diperhatikan oleh pemanggil. Walau bagaimanapun, jika anda memperuntukkan semula tatasusunan atau senarai itu sendiri (iaitu menukar rujukan), perubahan ini tidak akan dikesan oleh pemanggil.

Contoh:

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

Gunakan rujukan untuk rujukan lewat:

Jika anda memerlukan pemanggil untuk melihat kedua-dua perubahan kandungan dan penugasan semula rujukan, anda boleh menggunakan pengubah suai rujukan. Ini akan meluluskan rujukan melalui rujukan, memastikan bahawa sebarang pengubahsuaian yang dibuat pada rujukan itu sendiri dapat dilihat oleh pemanggil.

Contoh penggunaan ref:

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

Oleh itu, dalam C#, tatasusunan dan senarai diluluskan secara nilai secara lalai. Jika anda ingin menghantar rujukan itu sendiri melalui rujukan, anda boleh mengubah suai tandatangan kaedah untuk memasukkan pengubah ref.

Atas ialah kandungan terperinci Adakah Tatasusunan dan Senarai C# Diluluskan oleh Nilai atau Rujukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn