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;
    }
 }

我想在我的课程中使用变量'a',但我无法通过我正在使用的构造函数将它“移动”到我的课程中。我收到的错误消息是:

错误:字段初始值设定项无法引用非静态字段、方法或属性。

我知道这是一个基本问题,但感谢您的帮助

 class Class1
  {


    private   int r;
    private   int x;

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

  }
4

2 回答 2

3

只需将初始化移动class1到构造函数中:

class Form1 {
    int a = 0;

    Class1 obj1;

    public Form1() {
        obj1 = new Class1(a);
    }
}
于 2013-05-29T15:21:46.987 回答
1

您不能初始化依赖于类的另一个字段的字段。

来自C# 语言规范10.5.5:

字段声明可能包含变量初始化器。对于静态字段,变量初始化器对应于在类初始化期间执行的赋值语句。对于实例字段,变量初始值设定项对应于在创建类的实例时执行的赋值语句。

§10.5.4 中描述的默认值初始化适用于所有字段,包括具有变量初始化器的字段。因此,当一个类被初始化时,该类中的所有静态字段首先被初始化为其默认值,然后静态字段初始化程序按文本顺序执行。同样,当创建一个类的实例时,该实例中的所有实例字段首先被初始化为其默认值,然后实例字段初始化程序按文本顺序执行。

因此,在您的代码中,ais not initialized before class,尽管我认为编译器并不关心 is 在字母顺序之前还是之后。它只是不允许您使用一个实例变量来初始化另一个。

于 2013-05-29T16:10:41.103 回答