Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk menyelesaikan kesilapan C# CS0120: 'Rujukan objek diperlukan untuk medan, kaedah, atau harta bukan statik'?

Bagaimana untuk menyelesaikan kesilapan C# CS0120: 'Rujukan objek diperlukan untuk medan, kaedah, atau harta bukan statik'?

Linda Hamilton
Lepaskan: 2025-02-02 17:56:09
asal
384 orang telah melayarinya

How to Resolve the C# CS0120 Error:

C# CS0120 Ralat: "Rujukan objek diperlukan untuk bidang, kaedah, atau harta 'foo'"

bukan statik

Kesalahan ini timbul apabila anda cuba mengakses ahli bukan statik (medan, kaedah, atau harta) dari dalam konteks statik, seperti kaedah statik atau harta statik.

senario:

Bayangkan kod ini:

<code class="language-csharp">public partial class MyForm : Form
{
    private void MyMethod(object sender, EventArgs e)
    {
        // Error: Accessing a non-static member from a static method
        UpdateLabel(someValue); 
    }

    private void UpdateLabel(string text)
    {
        myLabel.Text = text; // myLabel is a non-static member (control)
    }
}</code>
Salin selepas log masuk
Penyelesaian:

Beberapa pendekatan dapat menyelesaikannya:

  1. Buat ahli statik:

    Jika sesuai, tukar ahli yang diakses ke . Ini hanya berfungsi jika ahli tidak bergantung pada data khusus contoh. static

    <code class="language-csharp">public static void UpdateLabel(string text) // Now static
    {
        // Access static members only here!  You can't access myLabel directly.
    }</code>
    Salin selepas log masuk
  2. Corak singleton:

    Gunakan singleton untuk mengakses contoh kelas anda. Ini sesuai apabila anda hanya memerlukan satu contoh kelas.

    <code class="language-csharp">public partial class MyForm : Form
    {
        private static MyForm _instance; // Singleton instance
    
        public static MyForm Instance
        {
            get { return _instance ?? (_instance = new MyForm()); }
        }
    
        private MyForm() { } // Private constructor
    
        private void MyMethod(object sender, EventArgs e)
        {
            Instance.UpdateLabel(someValue); 
        }
    
        // UpdateLabel remains non-static
    }</code>
    Salin selepas log masuk
  3. Mintaate kelas:

    Buat contoh kelas dalam kaedah statik.

    <code class="language-csharp">private static void MyMethod(object sender, EventArgs e)
    {
        var form = new MyForm();
        form.UpdateLabel(someValue);
    }</code>
    Salin selepas log masuk
  4. Buat kaedah panggilan tidak statik:

    Penyelesaian yang paling mudah sering membuat kaedah yang memanggil ahli bukan statik yang tidak statik.

    <code class="language-csharp">private void MyMethod(object sender, EventArgs e) // Remains non-static
    {
        UpdateLabel(someValue); 
    }</code>
    Salin selepas log masuk
Bacaan Lanjut:

Rujuk dokumentasi Microsoft mengenai ralat CS0120 untuk maklumat yang lebih terperinci.
  • Pertimbangkan implikasi setiap penyelesaian dengan teliti. Memilih pendekatan yang betul bergantung pada reka bentuk aplikasi anda dan konteks khusus kod.

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan kesilapan C# CS0120: 'Rujukan objek diperlukan untuk medan, kaedah, atau harta bukan statik'?. 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