Rumah > pembangunan bahagian belakang > C++ > Mengapa Saya Tidak Boleh Merujuk Ahli Bukan Statik dalam C# Field Initializers?

Mengapa Saya Tidak Boleh Merujuk Ahli Bukan Statik dalam C# Field Initializers?

Susan Sarandon
Lepaskan: 2024-12-31 08:31:08
asal
1019 orang telah melayarinya

Why Can't I Reference Non-Static Members in C# Field Initializers?

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

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:

    • Dalam pendekatan ini, nilai medan dimulakan dalam pembina kelas:
public class Service
{
    private readonly DinnerRepository repo;
    private readonly Dinner dinner;

    public Service()
    {
        repo = new DinnerRepository();
        dinner = repo.GetDinner(5);
    }
}
Salin selepas log masuk
  • Menggunakan Setempat Pembolehubah:

    • Pilihan ini melibatkan pengisytiharan pembolehubah setempat dalam pemula medan:
public class Service
{
    DinnerRepository repo;
    Dinner dinner;

    public Service()
    {
        repo = new DinnerRepository();
        dinner = repo.GetDinner(5);
    }
}
Salin selepas log masuk

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!

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