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>
Beberapa pendekatan dapat menyelesaikannya:
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>
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>
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>
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>
Rujuk dokumentasi Microsoft mengenai ralat CS0120 untuk maklumat yang lebih terperinci.
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!