2016-05-27 3 views
-1

私はC#でかなり新しく、プログラミングの経験の多くは実際に何年ものPHPの仕事から来ています。私が変数をクラスの中で正しく宣言していることを私が知る限り、しかし、私のMainメソッドの中で、現在のコンテキストに 'isnegative'変数が存在しないというコンパイルエラーCS0120が発生しています。C#の変数スコープを理解していない - メソッドがパブリックにアクセスしていますか?

変数がクラスワイドではありませんか?

namespace ConsoleApplication1 
{ 
class Program 
{ 
    public int isnegative; 
    static void Main() 
    { 
     isnegative = 0; 
     for (int i; i = 0; i < 10; i++;) 
     { 
      if (isnegative == 0) 
      { 
       i = i; 
       isnegative = 0; 
      } 
      else 
      { 
       i = i * (-1); 
       isnegative = 1; 
      } 
      Console.WriteLine(i); 
     } 
    } 
} 
+1

***静的な***の静的なメンバーとメンバーは、他の***静的な***のメンバーから見えます。ここで***メイン***は静的ですが、*** isNegative ***は*静的なものではなく*インスタンス*メンバです。 –

答えて

1

あなたの変数宣言static(あなたMainメソッドと同じ)を行うことで、問題を修正することができるはずです。

public static int isnegative;

しかし、あなたはあなたのfor文が書かれている方法のいくつかの問題もあります。次の変更は、プログラムが正しく機能することができます:変数は、クラスワイド

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     public static int isnegative; 

     static void Main() 
     { 
      isnegative = 0; 
      for (int i = 0; i < 10; i++) 
      { 
       if (isnegative == 0) 
       { 
        i = i; 
        isnegative = 0; 
       } 
       else 
       { 
        i = i*(-1); 
        isnegative = 1; 
       } 
       Console.WriteLine(i); 
      } 

      Console.ReadLine(); 
     } 
    } 
} 
0

ませんか?

はい、そうです。

あなたがメインの宣言を見れば:あなたは、静的メソッドで作業している

static void Main() 

。 静的メソッドは静的クラス変数でのみ機能します。 インスタンスを必要とする非静的変数ではなく、インスタンスなしで呼び出すことができるためです。

したがって、問題を修正するには、isnegative変数をstaticとして宣言するか、mainで宣言します。そしてあなたは大丈夫でしょう;)

関連する問題