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
Lepaskan: 2024-12-31 13:08:10
asal
341 orang telah melayarinya

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

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

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!

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