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).
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!