ホームページ > バックエンド開発 > C++ > C# で「非静的フィールド、メソッド、またはプロパティにはオブジェクト参照が必要です」というメッセージが表示されるのはなぜですか?

C# で「非静的フィールド、メソッド、またはプロパティにはオブジェクト参照が必要です」というメッセージが表示されるのはなぜですか?

Linda Hamilton
リリース: 2025-01-22 05:31:09
オリジナル
218 人が閲覧しました

Why Does C# Throw

C# 例外: 「非静的フィールド、メソッド、またはプロパティにアクセスするにはオブジェクト参照が必要です」

C# では、通常、静的メソッドがクラスの非静的メンバーにアクセスしようとすると、「非静的フィールド、メソッド、またはプロパティにアクセスするにはオブジェクト参照が必要です」エラーが発生します。

この記事のエラーは、Main メソッドの次のコード行で発生します:

<code class="language-c#">Population[i].bits = GetRandomBits();</code>
ログイン後にコピー

問題は、GetRandomBits クラスで非静的メソッドとして宣言されている Program メソッドにあります。ただし、Main メソッドは静的メソッドとして定義されているため、クラスの静的メンバーのみにアクセスできます。

解決策

このエラーを解決するには 2 つの方法があります:

1. クラスのインスタンスを作成します:

静的メソッドは非静的メンバーに直接アクセスできません。静的メソッドから非静的メソッドまたはプロパティにアクセスするには、まずクラスのインスタンスを作成し、次にそのインスタンスを通じてメソッドを呼び出すか、プロパティにアクセスします。例:

<code class="language-c#">// 创建 Program 类的实例
Program p = new Program();

// 通过实例调用 GetRandomBits 方法
Population[i].bits = p.GetRandomBits();</code>
ログイン後にコピー

2. メソッドを静的にします:

また、Program クラスで GetRandomBits メソッドを宣言するときに static キーワードを追加することで、静的メソッドにすることもできます。このようにして、静的 Main メソッドは、インスタンスを作成せずに GetRandomBits メソッドに直接アクセスできます。例:

<code class="language-c#">public static string GetRandomBits()
{
    // 方法实现
}</code>
ログイン後にコピー

上記のいずれかの方法でエラーを解消し、Main メソッドが GetRandomBits メソッドに正しくアクセスできるようにすることができます。

以上がC# で「非静的フィールド、メソッド、またはプロパティにはオブジェクト参照が必要です」というメッセージが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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