Rumah >pembangunan bahagian belakang >C++ >Adakah Tatasusunan dan Senarai C# Lulus dengan Rujukan atau Mengikut Nilai?

Adakah Tatasusunan dan Senarai C# Lulus dengan Rujukan atau Mengikut Nilai?

Barbara Streisand
Barbara Streisandasal
2025-01-10 10:07:41904semak imbas

Do C# Arrays and Lists Pass by Reference or by Value?

Melalui tatasusunan atau senarai dengan rujukan dalam C#

Adakah tatasusunan atau senarai dalam C# diluluskan melalui rujukan atau nilai secara lalai? Soalan ini sering timbul apabila ingin mengoptimumkan prestasi. Mari kita terokai jawapannya dan bincangkan sama ada melalui rujukan adalah pilihan bijak untuk kecekapan.

Jawapan:

Dalam C#, tatasusunan dan senarai diluluskan mengikut nilai, bukan dengan rujukan. Ini bermakna bahawa rujukan kepada tatasusunan atau senarai disalin ke dalam panggilan fungsi, bukannya tatasusunan atau senarai sebenar itu sendiri.

Apabila tatasusunan atau senarai dihantar ke fungsi, rujukan pada timbunan disalin ke timbunan. Perubahan yang dibuat pada kandungan tatasusunan atau senarai dalam fungsi akan kelihatan kepada pemanggil kerana rujukan menghala ke lokasi yang sama dalam ingatan. Walau bagaimanapun, sebarang percubaan untuk menetapkan semula tatasusunan atau senarai itu sendiri (iaitu menukar rujukan) tidak akan ditunjukkan dalam skop pemanggil.

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

Dalam contoh di atas, Foo mengubah suai elemen pertama tatasusunan dan perubahan ini kelihatan kepada pemanggil. Walau bagaimanapun, Bar memberikan tatasusunan baharu kepada data, yang tidak kelihatan kepada pemanggil.

Gunakan pengubah suai 'ref' untuk lulus melalui rujukan

Jika anda memerlukan pemanggil untuk melihat perubahan pada rujukan itu sendiri, anda boleh menggunakan pengubah suai rujukan. Apabila parameter diluluskan oleh ref, rujukan sebenar diluluskan, bukan salinan. Ini bermakna bahawa sebarang perubahan pada rujukan dalam fungsi akan ditunjukkan dalam skop pemanggil.

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

Cadangan pengoptimuman

Walaupun menghantar tatasusunan atau senarai melalui rujukan mungkin kelihatan seperti cara untuk meningkatkan prestasi, ia biasanya tidak disyorkan. Melewati nilai memastikan bahawa sebarang pengubahsuaian pada tatasusunan atau senarai disetempatkan dalam fungsi, menghalang perubahan yang tidak diingini pada bahagian lain program. Selain itu, pengoptimum .NET moden selalunya boleh mengendalikan nilai lulus dengan cekap tanpa campur tangan manual.

Atas ialah kandungan terperinci Adakah Tatasusunan dan Senarai C# Lulus dengan Rujukan atau Mengikut Nilai?. 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