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
Linda Hamiltonasal
2025-02-02 17:56:09438semak imbas

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>
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>
  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>
  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>
  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>
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!

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