Rumah > pembangunan bahagian belakang > C++ > Mengapa Medan Kelas C# Tidak Boleh Ditugaskan melalui Rujukan, dan Bagaimana Ini Boleh Diatasi?

Mengapa Medan Kelas C# Tidak Boleh Ditugaskan melalui Rujukan, dan Bagaimana Ini Boleh Diatasi?

DDD
Lepaskan: 2025-01-05 22:01:42
asal
375 orang telah melayarinya

Why Can't C# Class Fields Be Assigned by Reference, and How Can This Be Worked Around?

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:

  1. Medan Rujukan Tidak Selamat: Membenarkan medan rujukan akan membuka kemungkinan mencipta "bom jangka" dalam kod. Katakan anda memberikan medan rujukan kepada pembolehubah setempat yang mungkin menjadi tidak sah selepas kaedah selesai, yang membawa kepada kemungkinan ranap sistem.
  2. Kolam Storan Sementara: Pembolehubah setempat biasanya disimpan dalam kumpulan memori sementara untuk mengoptimumkan prestasi. Membenarkan medan rujukan akan memerlukan penggunaan timbunan kutipan sampah, yang kurang cekap.

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
}
Salin selepas log masuk

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!

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