ホームページ >バックエンド開発 >C++ >静的メソッドがC#で非静的メンバーにアクセスできないのはなぜですか?

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

Susan Sarandon
Susan Sarandonオリジナル
2025-02-02 17:46:09348ブラウズ

c#staticメソッドは、staticメンバー以外のエラーと解にアクセスできません

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

エラー:オブジェクトが参照されます

次のコードフラグメントは、この問題を示しています:

問題の原因
<code class="language-csharp">namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        ...

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

エラー情報は、静的な方法が非スタットメンバーを呼び出そうとすることを示しています

。静的メソッドは静的メンバーのみにアクセスすることができ、非スタットメンバーは属するオブジェクトへの参照を必要とします。

SumDatasolution setTextboxText

このエラーを解決する方法はたくさんあります:

メソッドを設定します:
  1. ただし、 メソッドがインスタンス変数にアクセスする必要がある場合、静的に設定することはできません。 setTextboxText
<code class="language-csharp">public static void setTextboxText(int result)</code>

を呼び出します setTextboxText

    constructorで、現在のインスタンスに
  1. を設定します:Form1 setTextboxText コールメソッドでA
  2. インスタンスを作成します:
<code class="language-csharp">class Form1
{
    public static Form1 Instance;   // 单例

    ...

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

Form1 Instanceインスタンスが既に存在する場合、この方法は適用できない場合があります。 Instance = this;

    コールメソッド
  1. は、stat派ではないインスタンスメソッドに設定されています(に属する):Form1
<code class="language-csharp">private static void SumData(object state)
{
    ...
    Form1 frm1 = new Form1();
    frm1.setTextboxText(result);
}</code>
これは通常、コードのカプセル化とメンテナンスを維持するため、最良のソリューションです。

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

以上が静的メソッドがC#で非静的メンバーにアクセスできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。