Pemahaman mendalam tentang rujukan tatasusunan yang dihantar dalam C#
Dalam C#, tatasusunan berbeza daripada jenis data asas Ia adalah jenis rujukan. Ini menimbulkan persoalan: bagaimana tatasusunan dihantar ke kaedah? Lulus mengikut nilai atau rujukan?
Lulus nilai
Secara lalai, rujukan tatasusunan dihantar mengikut nilai. Ini bermakna salinan rujukan dibuat dan diserahkan kepada kaedah. Perubahan yang dibuat pada kandungan tatasusunan di dalam kaedah akan kelihatan kepada kod panggilan, tetapi sebarang penugasan semula kepada tatasusunan itu sendiri tidak akan disebarkan kembali kepada pemanggil.
Lulus dengan rujukan
Untuk mengubah suai rujukan itu sendiri, anda boleh menggunakan ref
pengubah suai. Melepasi tatasusunan melalui rujukan membolehkan pemanggil melihat sebarang perubahan pada rujukan, termasuk penugasan semula.
Contoh
Kod berikut menunjukkan perbezaan antara lulus dengan nilai dan lulus dengan rujukan:
<code class="language-csharp">void Foo(int[] data) { data[0] = 1; // 调用方可见此更改 } void Bar(ref int[] data) { data = new int[20]; // 调用方可见此更改 }</code>
Apabila memanggil Foo
, salinan rujukan dihantar. Menukar kandungan tatasusunan dalam Foo
akan kelihatan dalam kod panggilan. Walau bagaimanapun, penugasan semula kepada tatasusunan dalam Foo
tidak akan dilihat oleh pemanggil.
Sebaliknya, apabila memanggil ref
dengan pengubah suai Bar
, rujukan itu sendiri diluluskan. Sebarang perubahan pada rujukan, termasuk penugasan semula, akan kelihatan dalam kod panggilan.
Atas ialah kandungan terperinci Bagaimanakah Tatasusunan Dihantar kepada Kaedah dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!