Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mengekalkan Rujukan Apabila Menetapkan Nilai kepada Medan Kelas dalam C#?

Bagaimanakah Saya Boleh Mengekalkan Rujukan Apabila Menetapkan Nilai kepada Medan Kelas dalam C#?

Linda Hamilton
Lepaskan: 2025-01-06 01:57:39
asal
326 orang telah melayarinya

How Can I Maintain References When Assigning Values to Class Fields in C#?

Memelihara Rujukan dalam Tugasan Medan Kelas dalam C#

Apabila cuba untuk menetapkan nilai dengan merujuk kepada medan kelas, tingkah laku yang tidak dijangka mungkin berlaku. Dalam contoh yang diberikan, memberikan "parameter ref" pada medan mengakibatkan kehilangan rujukan.

Memahami Sekatan

C# mengehadkan pengisytiharan medan sebagai rujukan kepada pembolehubah. Ini disebabkan oleh kemungkinan akibat:

  1. Membenarkan medan rujukan boleh membawa kepada situasi tidak selamat di mana storan untuk pembolehubah yang dirujuk tidak boleh diakses selepas pembolehubah di luar skop.
  2. Untuk mengekalkan rujukan dalam medan, CLR perlu memperuntukkan memori untuk pembolehubah tempatan pada timbunan sampah, yang akan memberi kesan pengoptimuman.

Mengatasi Had

Walaupun medan rujukan sebenar tidak mungkin, terdapat alternatif:

Pilihan 1 : Buat Kelas Pembungkus

Anda boleh mencipta kelas pembungkus yang memegang nilai yang dirujuk sebagai harta. Kelas boleh menyediakan kaedah untuk mendapatkan dan menetapkan nilai, mengekalkan rujukan dengan berkesan.

public class Wrapper
{
    public int Value { get; set; }
}
...
Wrapper wrapper = new Wrapper { Value = 123 };
Salin selepas log masuk

Pilihan 2: Gunakan Ungkapan Lambda

Anda boleh menggunakan ungkapan lambda untuk tentukan getter dan setter untuk pembolehubah yang dirujuk. Ini memberikan rujukan kepada pembolehubah melalui perwakilan.

public delegate int Getter();
public delegate void Setter(int value);
...
Getter getter = () => y;
Setter setter = z => { y = z; };
Salin selepas log masuk

Kesimpulan

Dengan memahami sebab di sebalik sekatan medan ref dan menggunakan teknik alternatif seperti kelas pembalut atau ungkapan lambda, adalah mungkin untuk mencapai tingkah laku seperti rujukan dalam tugasan medan kelas dalam C#.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengekalkan Rujukan Apabila Menetapkan Nilai kepada Medan Kelas dalam C#?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan