Menyimpan Rujukan Semasa Menugaskan ke Medan
Dalam C#, menugaskan melalui "rujukan" kepada medan kelas tidak boleh dilakukan. Ini kerana medan tidak boleh daripada jenis rujukan. Terdapat tiga sebab utama untuk ini:
Sebab untuk Sekatan:
Penyelesaian:
Walaupun terdapat sekatan, terdapat penyelesaian untuk mensimulasikan tingkah laku seperti rujukan:
Menggunakan Perwakilan dan Tindakan:
Buat perwakilan dengan pengambil dan penetap untuk nilai yang diingini. Simpan perwakilan ini dalam medan dan bukannya rujukan. Contohnya:
sealed class Ref<T> { private readonly Func<T> getter; private readonly Action<T> setter; public Ref(Func<T> getter, Action<T> setter) { this.getter = getter; this.setter = setter; } public T Value { get { return getter(); } set { setter(value); } } } ... Ref<int> x; void M() { int y = 123; x = new Ref<int>(() => y, z => { y = z; }); x.Value = 456; Console.WriteLine(y); // 456 }
Dalam kes ini, x menyimpan perwakilan yang boleh mendapatkan dan menetapkan nilai y. Apabila anda menetapkan x.Value, ia mengubah suai y.
Atas ialah kandungan terperinci Mengapa Medan Kelas C# Tidak Boleh Ditugaskan melalui Rujukan, dan Bagaimana Ini Boleh Diatasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!