Pemula Medan Tidak Boleh Merujuk Ahli Bukan Statik: Penjelasan Terperinci
Apabila cuba memulakan medan kelas menggunakan pemula medan , adalah penting untuk mematuhi sekatan tertentu. Seperti yang ditunjukkan oleh soalan, merujuk ahli bukan statik dalam pemula medan mengakibatkan ralat.
Kod yang disediakan menggambarkan isu ini dalam kelas Perkhidmatan:
public class Service { DinnerRepository repo = new DinnerRepository(); // Error: Cannot reference non-static member `repo` Dinner dinner = repo.GetDinner(5); }
Ralat berlaku kerana medan pemula tidak dibenarkan merujuk ahli kelas bukan statik. Ini termasuk pembolehubah contoh, kaedah dan sifat.
Penyelesaian Alternatif:
Penyelesaian alternatif yang dicadangkan dalam jawapan termasuk:
Menggunakan Pembina Permulaan:
public class Service { private readonly DinnerRepository repo; private readonly Dinner dinner; public Service() { repo = new DinnerRepository(); dinner = repo.GetDinner(5); } }
Menggunakan Setempat Pembolehubah:
public class Service { DinnerRepository repo; Dinner dinner; public Service() { repo = new DinnerRepository(); dinner = repo.GetDinner(5); } }
Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa pendekatan yang terakhir mencipta hanya pembolehubah tempatan dan bukannya contoh pembolehubah.
Sekatan pada Pemula Medan:
Menurut spesifikasi C# 4 (bahagian 10.5.5.2), pemula medan tidak boleh merujuk contoh yang sedang dibuat. Oleh itu, merujuk secara langsung ahli contoh melalui nama ringkas dalam pemula medan adalah dilarang.
Ringkasan:
Untuk mengelakkan "Pengasa medan tidak boleh merujuk medan bukan statik , kaedah atau harta", adalah penting untuk memahami batasan pemula medan dan menggunakan pendekatan alternatif yang sesuai seperti pemula pembina atau menggunakan pembolehubah setempat. Alternatif ini membenarkan permulaan yang betul bagi ahli contoh kelas.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Merujuk Ahli Bukan Statik dalam C# Field Initializers?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!