Rumah >pembangunan bahagian belakang >C++ >Mengapa 'Rujukan Objek Diperlukan' Muncul Apabila Memanggil Kaedah Bukan Statik daripada Kaedah Statik dalam C#?

Mengapa 'Rujukan Objek Diperlukan' Muncul Apabila Memanggil Kaedah Bukan Statik daripada Kaedah Statik dalam C#?

DDD
DDDasal
2025-01-22 05:24:16215semak imbas

Why Does

Ralat kod C#: "Rujukan objek diperlukan untuk mengakses medan, kaedah atau sifat bukan statik"

Coretan kod yang disediakan melemparkan ralat dalam Kelas 2 (Melaksanakan Algoritma) disebabkan percubaan untuk mengakses kaedah bukan statik Main() daripada kaedah statik GetRandomBits().

Dalam kaedah Main(), baris Population[i].bits = GetRandomBits(); menyebabkan ralat. Masalahnya ialah GetRandomBits() ialah kaedah bukan statik dalam kelas Program, manakala Main() ialah kaedah statik.

Penyelesaian: statik vs. bukan statik

  • Kaedah bukan statik: Mesti dipanggil daripada contoh (objek) kelas.
  • Kaedah statik: boleh dipanggil terus daripada nama kelas tanpa membuat contoh.

Penyelesaian:

  1. Buat contoh: Buat tika kelas Program dan panggil GetRandomBits() daripada tika itu.
<code class="language-csharp">// 创建 Program 实例
Program p = new Program();

// 从实例访问非静态方法
Population[i].bits = p.GetRandomBits();</code>
  1. Jadikan GetRandomBits() statik: Ubah suai kaedah static kepada kaedah statik dengan menambah kata kunci GetRandomBits() sebelum pengisytiharan kaedah.
<code class="language-csharp">public static string GetRandomBits()
{
    // 在此处实现方法逻辑...
}</code>

Kaedah yang anda pilih bergantung pada reka bentuk program anda dan tujuan kaedah GetRandomBits(). Jika GetRandomBits() perlu mengakses ahli kelas bukan statik lain, ia mesti menggunakan kaedah pertama (buat contoh). Jika GetRandomBits() tidak perlu mengakses ahli kelas bukan statik, pendekatan kedua (menjadikannya statik) adalah lebih bersih. Ingat, penggunaan kaedah statik yang berlebihan boleh menyebabkan kod anda kurang boleh diuji dan diselenggara.

Atas ialah kandungan terperinci Mengapa 'Rujukan Objek Diperlukan' Muncul Apabila Memanggil Kaedah Bukan Statik daripada Kaedah Statik dalam C#?. 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