【C#エラー】フィールド初期化子は、静的でないフィールド、メソッドまたはプロパティの “名前” を参照できません。解決方法【CS0236】

C#,エラー/例外

「CS0236: フィールド初期化子によって、静的でないフィールド、メソッドまたはプロパティの “名前" を参照することはできません。」エラーの解決方法をご紹介します。

C#で発生するエラー
CS0236: フィールド初期化子は、静的でないフィールド、メソッドまたはプロパティの “名前" を参照できません。

上記コンパイルエラーが発生した時の解決方法をご紹介します。

下記にC#で発生する例外処理の一覧をまとめていますので解決できない場合は合わせてご確認ください。
⇒例外処理クラス一覧まとめ【原因と解決方法】

C#のおすすめ講座を受講して、最短1週間でC#をマスターしよう!
⇒C#が学べるおすすめプログラミングスクール&オンライン講座11選

C# フィールド初期化子は、静的でないフィールド、メソッドまたはプロパティの “名前" を参照できません。の原因

CS0236: フィールド初期化子は、静的でないフィールド、メソッドまたはプロパティの “名前" を参照できません。
のコンパイルエラーの原因は
クラス内にある変数で他の変数を初期化した
だからです。


エラーコードの例を見て具体的に確認してみましょう。

class Program
{
    public int i = 5;
    public int j = i;  // CS0236エラーが発生する。

    public Program()
    {
        // コンストラクタ
    }
}

上記コードの「public int j = i;」でCS0236エラーが発生。

「CS0236: フィールド初期化子によって、静的でないフィールド、メソッドまたはプロパティの “名前" を参照することはできません。」

上記のプログラムでは変数「int j」に、クラス内にある変数「int i」を代入しようとしています。
しかしこの処理でエラーが発生してしまいました。

このように、クラスにある変数を他の変数に代入しようとするとCS0236エラーが発生します。

CS0019の詳細はこちらから。

C# フィールド初期化子は、静的でないフィールド、メソッドまたはプロパティの “名前" を参照できません。の解決法

CS0236: フィールド初期化子によって、静的でないフィールド、メソッドまたはプロパティの “名前" を参照することはできません。のエラーを解決する方法をご紹介します。

コンストラクタを使って変数を代入する

コンストラクタ内で変数を代入するとエラーが解消されます。
下記のプログラムをご覧ください。

class Program
{
    public int i = 5;
    public int j;

    public Program()
    {
        // コンストラクタ
        j = i;  // CS0236エラーが発生しない。コンストラクタ内だとエラーが発生しない。
    }
}

コンストラクタpublic Program(){}内の処理で変数jにiを代入しています。
このようにコンストラクタ内でクラスの変数を代入してもエラーが発生しません。

コンストラクタとはインスタンスが生成された瞬間に実行されるメソッドです。

フィールド変数を初期化したい時に使用されるメソッドです。
クラス内の変数を初期化したり、クラス内変数を使用する際、コンストラクタ内で行いましょう。

クラス内の変数を静的化(static)にする

変数を静的化(クラスオブジェクト共通で使用する値)するとエラーが解消されます。

class Program
{
    public static int i = 5;//静的化(static)をデータ型の前につけるとエラーが解消される。
    public int j = i;

    public Program()
    {
        // コンストラクタ
        j = i;  // CS0236エラーが発生しない。コンストラクタ内だとエラーが発生しない。
    }
}
CS0120エラーが解消される

上記のように、クラス内で使用したい変数の前に「static」を置くとエラーが解消されます。

クラス内の変数を使用しない

クラス内の変数を使用せず、値をそのまま代入するとエラーが解消されます。

class Program
{
    public int i = 5;
    public int j = 10;

    public Program()
    {
        // コンストラクタ
        j = i;  // CS0236エラーが発生しない。コンストラクタ内だとエラーが発生しない。
    }
}

以上が「CS0236: フィールド初期化子によって、静的でないフィールド、メソッドまたはプロパティの “名前" を参照することはできません。」の解決方法です。

ご参考までに。



エラーを解決できなくて途方に暮れている人へ。

■無料プログラミング講座を開設しています!
下記にVisual Studioを使ったC#プログラミング初心者向け完全ガイドを掲載しています。

このガイドを一通り勉強すれば、C#プログラミングの基礎が学べます。
是非チャレンジしてみてください!

C#初心者向けに始め方ガイドを作成しています。
筆者

プログラミング初心者の方はぜひチャレンジしてみてください!!

C#,エラー/例外

Posted by 9noike