Code Fix

初級

static文脈からインスタンスメンバーへアクセスした原因

staticなMainからインスタンスメンバーへ直接アクセスしようとしたときに出ます。static/インスタンスの違いを理解する重要なつまずきポイントです。

エラーメッセージの読み方

Program.cs(4,34): error CS0120: An object reference is required for the non-static field, method, or property 'Program.value'
Program.cs
ファイル名
4
行番号
34
列番号 — この位置でコンパイラが解析に失敗しました
CS0120
エラーコード — 検索するとMicrosoftの解説ページが見つかります
An object reference is required for the non-static field, method, or property 'Program.value'
内容 — 期待していたもの、または受け付けられなかったもの

このエラーが出る典型パターン

パターン1

 1  class Program {
 2      int value = 10;
 3      static void Main(string[] args) {
 4          System.Console.WriteLine(Program      .value);
                                           ^
 5      }
 6  }
Program.cs(4,34): error CS0120: An object reference is required for the non-static field, method, or property 'Program.value'

staticなMainからは、インスタンスを作らないとインスタンスフィールドにアクセスできません。

直し方: Programnew Program() にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  class Program {
 2      void Hello() { System.Console.WriteLine("Hi"); }
 3      static void Main(string[] args) {
 4          Program      .Hello();
                  ^
 5      }
 6  }
Program.cs(4,9): error CS0120: An object reference is required for the non-static field, method, or property 'Program.Hello()'

Helloはインスタンスメソッドです。static文脈から直接クラス名で呼び出すことはできません。

直し方: Programnew Program() にします。

この問題を解いてみる →

パターン3

 1  class Program {
 2      int count = 0;
 3      void Increment() { count++; }
 4      static void Main(string[] args) {
 5          Program p = new Program();
 6          p.Increment();
 7          System.Console.WriteLine(Program.count);
                                        ^
 8      }
 9  }
Program.cs(7,34): error CS0120: An object reference is required for the non-static field, method, or property 'Program.count'

countはインスタンスpに属します。クラス名Programでは、どのインスタンスの値か特定できません。

直し方: Programp にします。

この問題を解いてみる →

よくある誤解

staticなMainメソッドから、クラスに属する(staticでない)フィールドやメソッドへ直接アクセスすることはできません。インスタンスを作る必要があります。

まとめ

static文脈からインスタンスメンバーへアクセスした原因は初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)