Rumah >pembangunan bahagian belakang >C++ >Mengapa kaedah statik tidak boleh mengakses ahli bukan statik di C#?

Mengapa kaedah statik tidak boleh mengakses ahli bukan statik di C#?

Susan Sarandon
Susan Sarandonasal
2025-02-02 17:46:09300semak imbas

C# Kaedah statik tidak dapat mengakses kesilapan dan penyelesaian ahli bukan statik

Why Can't a Static Method Access Non-Static Members in C#?

ralat: Objek dirujuk

Serpihan kod berikut menunjukkan masalah ini:

punca masalah
<code class="language-csharp">namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        ...

        private static void SumData(object state)
        {
            ...
            setTextboxText(result); // 错误:非静态字段、方法或属性
        }
    }
}</code>

Maklumat ralat menunjukkan bahawa kaedah statik cuba hubungi ahli bukan statik

. Kaedah statik hanya boleh mengakses ahli statik, dan ahli bukan statik memerlukan rujukan kepada objek yang dimiliki.

SumData penyelesaian setTextboxText

Terdapat banyak cara untuk menyelesaikan kesilapan ini:

Tetapkan kaedah

sebagai statik:

  1. Walau bagaimanapun, jika kaedah perlu mengakses pembolehubah contoh, ia tidak boleh ditetapkan ke statik. setTextboxText
  2. Panggil
:
<code class="language-csharp">public static void setTextboxText(int result)</code>

setTextboxText

    dalam pembina, tetapkan
  1. ke contoh semasa: . Form1 setTextboxText Buat contoh
  2. dalam kaedah panggilan:
<code class="language-csharp">class Form1
{
    public static Form1 Instance;   // 单例

    ...

    private static void SumData(object state)
    {
        ...
        Instance.setTextboxText(result);
    }
}</code>

Form1 Instance Jika contoh sudah wujud, kaedah ini mungkin tidak terpakai. Instance = this;

    Kaedah panggilan
  1. ditetapkan kepada kaedah Instance Non -Static (milik ): Form1
<code class="language-csharp">private static void SumData(object state)
{
    ...
    Form1 frm1 = new Form1();
    frm1.setTextboxText(result);
}</code>
Ini biasanya penyelesaian terbaik kerana ia mengekalkan enkapsulasi dan penyelenggaraan kod.

Form1 Untuk maklumat lanjut, sila rujuk dokumen MSDN.

Atas ialah kandungan terperinci Mengapa kaedah statik tidak boleh mengakses ahli bukan statik di 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