0
 public partial class Form1 : Form
  {
    Class1 class = new Class1(30,a);

    public Form1()
    {

        InitializeComponent();
    }

     public int a = 0;


    private void Timer1_Tick(object sender, EventArgs e)
    {
        a += 1;
    }
 }

calss で変数 'a' を使用したいのですが、使用しているコンストラクターを介してクラスに "移動" できません。私が受け取るエラーメッセージは次のとおりです。

エラー: フィールド初期化子は、非静的フィールド、メソッド、またはプロパティを参照できません。

私はそれが基本的な問題であることを知っていますが、助けていただければ幸いです

 class Class1
  {


    private   int r;
    private   int x;

    public Construct(int p, int c)
    {
        this.r = p;
        this.x = c;
    }

  }
4

2 に答える 2

1

クラスの別のフィールドに依存するフィールドを初期化することはできません。

C# 言語仕様10.5.5から:

フィールド宣言には、変数初期化子を含めることができます。静的フィールドの場合、変数初期化子は、クラスの初期化中に実行される割り当てステートメントに対応します。インスタンス フィールドの場合、変数初期化子は、クラスのインスタンスが作成されるときに実行される代入ステートメントに対応します。

§10.5.4 で説明されているデフォルト値の初期化は、変数初期化子を持つフィールドを含むすべてのフィールドに対して発生します。したがって、クラスが初期化されると、そのクラスのすべての静的フィールドが最初にデフォルト値に初期化され、次に静的フィールド初期化子がテキスト順に実行されます。同様に、クラスのインスタンスが作成されると、そのインスタンスのすべてのインスタンス フィールドが最初にデフォルト値に初期化され、次にインスタンス フィールド初期化子がテキスト順に実行されます。

したがって、あなたのコードでaは、 is は の前に初期化されclassませんが、コンパイラは is がアルファベット順に前後にあるかどうかを気にしないと思います。あるインスタンス変数を使用して別のインスタンス変数を初期化することはできません。

于 2013-05-29T16:10:41.103 に答える