Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah parameter c# lulus benar -benar berfungsi: nilai vs rujukan?

Bagaimanakah parameter c# lulus benar -benar berfungsi: nilai vs rujukan?

DDD
Lepaskan: 2025-01-31 00:36:10
asal
240 orang telah melayarinya

How Does C# Parameter Passing Really Work: Value vs. Reference?
Pemindahan parameter c# c Dalam

C#, penghantaran nilai dan pemindahan rujukan adalah konsep asas yang mesti dimiliki oleh pengaturcara. Walaupun jenis bukan -original biasanya dianggap dihantar, keadaan tidak semestinya berlaku untuk objek bukan original tertentu (seperti System.Drawing.Image).

System.Drawing.Image Object's Speciality

Apabila melepasi objek System.Drawing.Image ke kaedah dan memuatkan imej kepadanya, biasanya kami mengharapkan objek asal untuk mencerminkan perubahan ini selepas kembali. Walau bagaimanapun, ini tidak berlaku untuk System.Drawing.Image. Perubahan yang dibuat dalam kaedah panggilan tidak akan menyebarkan penerima pemulihan, yang akan menyebabkan kekeliruan.

Kebenaran "penghantaran rujukan"

Kesalahpahaman ini datang dari salah faham tentang makna rujukan. Dalam C#, objek itu sendiri tidak akan dihantar. Sebaliknya, nilai mereka diluluskan pada nilai parameter awal. Untuk jenis rujukan, nilai -nilai ini adalah rujukan kepada objek itu sendiri. Oleh itu, apa -apa perubahan yang dibuat oleh objek itu sendiri dalam kaedah panggilan akan dapat dilihat oleh pihak panggilan.

Tetapi yang penting ialah ambil perhatian bahawa nilai parameter itu sendiri (iaitu, rujukan kepada objek) tidak diluluskan mengikut rujukan. Ini bermakna jika parameter diperuntukkan nilai baru dan mengutip objek yang berbeza, pihak panggilan tidak akan melihat perubahan ini.

Penyelesaian: Mengekspresikan pemindahan rujukan

Untuk memastikan bahawa bahagian panggilan itu sendiri dapat dilihat, panggilan mesti diluluskan. Tidak kira sama ada parameter adalah jenis nilai atau jenis rujukan, ini boleh dilaksanakan oleh pengubah

atau

.

Dengan menggunakan pengubah ini, parameter sebenarnya diluluskan mengikut rujukan, dan perubahan yang dibuat dalam kaedah itu akan ditunjukkan dalam pihak panggilan. Contoh

out Untuk menerangkan konsep ini, sila pertimbangkan contoh berikut: ref

Dalam contoh pertama, parameter diluluskan oleh nilai, dan perubahan kepada parameter itu sendiri tidak dapat dilihat oleh pihak panggilan. Dalam contoh kedua, formula pengubah

dipaparkan mengikut parameter rujukan, yang dapat dilihat oleh parameter itu sendiri. Dalam contoh ketiga, parameter diluluskan dengan rujukan, tetapi perubahan kepada objek itu sendiri dapat dilihat, kerana nilai parameter adalah rujukan kepada objek.

Kesimpulan

C# Pemindahan rujukan adalah konsep yang halus, dan kelakuannya tidak selalunya seperti yang diharapkan oleh intuisi kami. Memahami perbezaan antara objek penghantaran dan nilai penghantaran rujukan adalah penting untuk kod yang berjalan seperti yang diharapkan.

Atas ialah kandungan terperinci Bagaimanakah parameter c# lulus benar -benar berfungsi: nilai vs rujukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan