ホームページ > バックエンド開発 > C++ > 静的方法から非静的な方法を呼び出すのはなぜCS0120エラーを引き起こすのですか?

静的方法から非静的な方法を呼び出すのはなぜCS0120エラーを引き起こすのですか?

Patricia Arquette
リリース: 2025-02-02 18:01:09
オリジナル
335 人が閲覧しました

Why Does Calling a Non-Static Method from a Static Method Cause a CS0120 Error?

C#CS0120エラー: "オブジェクト参照が必要です..."

このエラーは、「非定位フィールド、方法、またはプロパティにオブジェクト参照が必要です...」は、静的方法から非静的な方法(または非静的なメンバーにアクセスする)を呼び出そうとすると発生します。 C#で。 コアの問題は、静的方法がクラスの特定のインスタンスではなく、クラス自体に属していることです。 インスタンス固有のデータまたはメソッドにアクセスできません

シナリオとソリューションオプション:

クラス内に

のような非静的な方法があるとしましょう。 静的メソッド(例えば、setTextboxText)からForm1を呼び出すと、CS0120エラーが発生します。 それを修正する理由と方法は次のとおりです setTextboxTextSumDataなぜエラーが発生するのか:

非静的なメソッドは、クラスのオブジェクト

(インスタンス)で動作します。 それらは、各オブジェクトに固有のインスタンス変数(フィールド)を使用することが多いため、操作するために特定のオブジェクトが必要です。 ただし、静的メソッドには関連するオブジェクトがありません。これはクラスレベルの方法です。 したがって、非静的なメンバーに直接アクセスしたり、電話をかけたりすることはできません

ソリューション:

いくつかのアプローチはこれを解決できます:

メソッドを静的にします(可能な場合):
    最も単純な解決策は、
  1. static

    を作成することです。 ただし、メソッドがインスタンス変数(テキストボックスのテキストなど)を操作する場合、これはしばしば実行不可能です。 setTextboxTextシングルトンを使用してください:

    の単一のインスタンスを保持する
  2. 内に静的プロパティを作成します。このシングルトンは、静的方法からアクセスできます。 このアプローチでは、並行性の問題を回避するために慎重な管理が必要です
  3. 静的メソッドでインスタンスを作成します:Form1intantiateForm1静的メソッド(

    )内に
  4. を呼び出します。 これにより、静的メソッドが呼び出されるたびに新しいインスタンスが作成されます。 インスタンスが一時的にのみ必要でない限り、これは通常、パフォーマンス上の理由で推奨されません。
  5. 呼び出し方式を非静的にする:Form1最もきれいなソリューションは、多くの場合、呼び出し方法(SumData)を非静的にすることです。これにより、インスタンスメンバーに直接アクセスできるようになり、回避策が必要になります。 これには、クラス構造のわずかな再設計が必要です setTextboxText

  6. 適切なソリューションの選択:

    最良のアプローチは、アプリケーションの設計と要件に依存します。 可能であれば、SumData非静的(オプション4)を作成することは、明確さと保守性のための好ましいソリューションです。 シングルトンパターン(オプション2)は、クラスの1つのインスタンスのみが本当に必要な状況に適しています。 潜在的なパフォーマンスへの影響により、静的メソッド(オプション3)内で新しいインスタンスを作成する必要があります。 メソッドを静的にする(オプション1)は、メソッドがインスタンス変数に依存しない場合にのみ実行可能です。

以上が静的方法から非静的な方法を呼び出すのはなぜCS0120エラーを引き起こすのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート