Rumah >pembangunan bahagian belakang >C++ >Mengapa Saya Tidak Boleh Memulakan Medan Bukan Statik dengan Rujukan kepada Medan Bukan Statik Lain dalam C#?

Mengapa Saya Tidak Boleh Memulakan Medan Bukan Statik dengan Rujukan kepada Medan Bukan Statik Lain dalam C#?

Susan Sarandon
Susan Sarandonasal
2024-12-31 13:08:10343semak imbas

Why Can't I Initialize a Non-Static Field with a Reference to Another Non-Static Field in C#?

Kekaburan Pemula Medan: Rujukan Medan Bukan Statik dalam Kelas Perkhidmatan

Selalunya dalam pembangunan perisian, kita perlu memulakan medan contoh dalam kelas untuk memanfaatkan fungsi mereka. Walau bagaimanapun, percubaan untuk memulakan medan kejadian dengan rujukan kepada medan, kaedah atau sifat bukan statik dalam kelas lain akan mengakibatkan ralat "Pengasa medan tidak boleh merujuk medan, kaedah atau sifat bukan statik."

Pertimbangkan contoh berikut, di mana kita mempunyai kelas DinnerRepository dan kelas Perkhidmatan:

public class DinnerRepository
{
    DinnerDataContext db = new DinnerDataContext();
    public Dinner GetDinner(int id) {...}
}

public class Service
{
    DinnerRepository repo = new DinnerRepository(); 
    Dinner dinner = repo.GetDinner(5);
}

Percubaan untuk menyusun kod ini akan membuang kesilapan yang disebutkan di atas. Ini kerana pemula medan untuk makan malam dalam kelas Perkhidmatan merujuk contoh repo, yang bukan statik. Pemula medan adalah terhad dalam skop dan tidak boleh mengakses ahli khusus contoh.

Satu penyelesaian biasa untuk menyelesaikan isu ini ialah menangguhkan permulaan sehingga selepas pembina dilaksanakan. Walau bagaimanapun, pendekatan ini mencipta pembolehubah tempatan dan bukannya pembolehubah contoh.

Penyelesaian pilihan adalah untuk memulakan medan dalam pembina, di mana ia dibenarkan untuk merujuk contoh ini secara tersirat. Pendekatan ini mencipta pembolehubah contoh dengan gelagat yang diingini:

public class Service
{
    private DinnerRepository repo;
    private Dinner dinner;

    public Service()
    {
        repo = new DinnerRepository();
        dinner = repo.GetDinner(5);
    }
}

Dengan memahami batasan pemula medan, pembangun boleh mengelakkan ralat biasa ini dan mengurus pembolehubah contoh dengan berkesan dalam kod mereka.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Memulakan Medan Bukan Statik dengan Rujukan kepada Medan Bukan Statik Lain dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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