2016-06-24 14 views
0

誰でもエラーが発生する理由を説明できます "静的コンテキストではない私は、静的コンテキストではないですけれどもC#実際には静的コンテキスト内にない静的コンテキスト内の非静的メンバーフィールドにアクセスすることはできません

class Test 
{ 

    public Test wtf = new Test(); 
    public int variable = wtf.queuePosition; 

    private int queuePosition; 
    public Test() 
    { 
     queuePosition = 5; 
    } 
} 
+0

wtfのポストコード – Paparazzi

+1

wtfはTestクラスのインスタンスです - – Kobek

+1

フィールド初期化子の異なるフィールドの値から1つのフィールドを初期化することはできません。そのコードをコンストラクタに移動する必要があります。 「静的コンテキスト」とは、インスタンスメンバーへのアクセスが禁止されていることを意味します。 –

答えて

3

。; "公共のint型変数= wtf.queuePosition" 文脈

私はライン上のエラーを取得します。 0

インスタンスメンバー変数の初期化は、コンストラクターのコードが実行される前に行われます。現時点では、まだthisという参照はありません。

私はあなたの間違いを恐れています。コンパイラの観点から見ると、は、静的コンテキストではです。 C# specification (17.4.5.2 Instance field initialization)から

:インスタンスフィールドの

変数初期化子は、作成されるインスタンスを参照することはできません。したがって、可変イニシャライザが単純名でインスタンス・メンバを参照するためのコンパイル時エラーであるため、可変イニシャライザでこれを と参照するのはコンパイル時エラーです。

0

変数を別の変数内のプロパティの値に割り当てています。変数wtfは非静的ですが、クラス内の変数の代入は静的です。したがって、代入、 'public int variable = wtf.queuePosition;'は、静的コンテキスト内にあります。

これは許可されていない明らかな理由の1つがあなたの例の中に示されています。あなたのコードでは、スタックオーバーフローの例外が本当に素早く発生します。 Testの各インスタンスがTestの別のインスタンスを新しく作成しているので、別のインスタンスをTestupします。

関連する問題