「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 静的メソッドがC#で非静的メンバーにアクセスできないのはなぜですか?

静的メソッドがC#で非静的メンバーにアクセスできないのはなぜですか?

2025-03-24に投稿されました
ブラウズ:569

c#staticメソッドのエラーとソリューションは非静的メンバーにアクセスできません

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

エラー:オブジェクトリファレンス必須

]

次のコードスニペットがこの問題を示しています:

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        ...

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

問題の原因

]

エラーメッセージは、静的メソッド sumdata が非静的メンバー setextboxtext を呼び出そうとすることを示します。静的メソッドは静的メンバーのみにアクセスできますが、非静的メンバーにアクセスするには、それが属するクラスのオブジェクトへの参照が必要です。

solutions

このエラーを修正する方法はいくつかあります:

  1. set detextboxtext method to static: を設定します。
public static void setTextboxText(int result)
ただし、

settexboxtext メソッドがインスタンス変数へのアクセスを必要とする場合、静的に設定することはできません。

  1. static singleton call settexboxtext ]]
class form1 { public static form1インスタンス ... プライベート静的ボイドsumdata(オブジェクト状態) { ... instance.settextboxtext(result); } }
class Form1
{
    public static Form1 Instance;   // 单例

    ...

    private static void SumData(object state)
    {
        ...
        Instance.setTextboxText(result);
    }
}

instance form1 のコンストラクターで、現在のインスタンスに設定する必要があります。

CREATE A
    form1
  1. in the Calling Method:
  2. private static void sumdata(オブジェクト状態) { ... form1 frm1 = new form1(); frm1.settextboxtext(result); }
private static void SumData(object state)
{
    ...
    Form1 frm1 = new Form1();
    frm1.setTextboxText(result);
}
のインスタンスがすでに存在する場合、この方法は機能しない可能性があります。

sumdata
    コールメソッド
  1. sumdata を非定格インスタンスメソッドとして設定します( form1 に属する): を設定します。
private void sumdata(オブジェクト状態) { ... setTexBoxtext(result); }
private void SumData(object state)
{
    ...
    setTextboxText(result);
}

詳細については、MSDNドキュメントを参照してください。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3