Rumah >pembangunan bahagian belakang >C++ >Mengapa memanggil kaedah bukan statik dari kaedah statik menyebabkan ralat CS0120?

Mengapa memanggil kaedah bukan statik dari kaedah statik menyebabkan ralat CS0120?

Patricia Arquette
Patricia Arquetteasal
2025-02-02 18:01:09384semak imbas

Why Does Calling a Non-Static Method from a Static Method Cause a CS0120 Error?

C# CS0120 Ralat: "Rujukan objek diperlukan ..." ralat ini, "Rujukan objek diperlukan untuk medan, kaedah, atau harta benda yang tidak statik ...", timbul apabila anda cuba memanggil kaedah bukan statik (atau mengakses ahli bukan statik) dari kaedah statik Dalam C#. Isu teras adalah bahawa kaedah statik tergolong dalam kelas itu sendiri, bukan kepada contoh kelas tertentu. Mereka tidak mempunyai akses kepada data atau kaedah khusus contoh. Pilihan senario dan penyelesaian:

katakan anda mempunyai kaedah yang tidak statik seperti dalam kelas . Jika anda cuba memanggil

dari kaedah statik (mis.,

), anda akan menghadapi ralat CS0120. Inilah sebabnya dan bagaimana untuk memperbaikinya: setTextboxText Form1 setTextboxText Mengapa ralat berlaku: SumData

Kaedah bukan statik beroperasi pada (contoh) kelas. Mereka memerlukan objek khusus untuk bekerja dengan kerana mereka sering menggunakan pembolehubah contoh (medan) yang unik untuk setiap objek. Walau bagaimanapun, kaedah statik tidak mempunyai objek yang berkaitan; Ini kaedah peringkat kelas. Oleh itu, ia tidak dapat mengakses atau menghubungi ahli yang tidak statik secara langsung.

Penyelesaian:

Beberapa pendekatan dapat menyelesaikannya:

Buat kaedah statik (jika boleh):

Penyelesaian yang paling mudah adalah untuk membuat
    static
  1. jika

    ia tidak bergantung pada data khusus contoh. Walau bagaimanapun, ini sering tidak boleh dilaksanakan jika kaedah memanipulasi pembolehubah contoh (seperti teks kotak teks). setTextboxText Gunakan singleton:

    Buat harta statik dalam
  2. yang memegang satu contoh
  3. . Singleton ini kemudiannya boleh diakses dari kaedah statik. Pendekatan ini memerlukan pengurusan yang teliti untuk mengelakkan isu -isu konkurensi.

    Form1 Form1 Buat contoh dalam kaedah statik:

    Instantiate
  4. dalam kaedah statik (
  5. ) sebelum memanggil

    . Ini mewujudkan contoh baru setiap kali kaedah statik dipanggil. Ini biasanya tidak disyorkan untuk sebab -sebab prestasi melainkan jika contohnya diperlukan hanya sementara. Form1 SumData setTextboxText Buat kaedah panggilan tidak statik:

    Penyelesaian yang paling bersih sering membuat kaedah panggilan (
  6. ) tidak statik. Ini membolehkan ia mengakses ahli contoh secara langsung, menghapuskan keperluan untuk penyelesaian. Ini memerlukan sedikit reka bentuk struktur kelas anda.
  7. SumData memilih penyelesaian yang betul:

  8. Pendekatan terbaik bergantung pada reka bentuk dan keperluan aplikasi anda. Jika boleh, membuat SumData tidak statik (pilihan 4) sering menjadi penyelesaian pilihan untuk kejelasan dan kebolehkerjaan. Corak singleton (pilihan 2) sesuai untuk situasi di mana anda benar -benar memerlukan hanya satu contoh kelas. Mewujudkan contoh baru dalam kaedah statik (pilihan 3) harus digunakan dengan berhati -hati kerana implikasi prestasi yang berpotensi. Membuat kaedah statik (pilihan 1) hanya berdaya maju jika kaedah tidak bergantung kepada pembolehubah contoh.

Atas ialah kandungan terperinci Mengapa memanggil kaedah bukan statik dari kaedah statik menyebabkan ralat CS0120?. 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