错误1字段初始值设定项无法引用非静态字段,方法或属性
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; } }
只需将class1
的初始化移动到构造函数中:
class Form1 { int a = 0; Class1 obj1; public Form1() { obj1 = new Class1(a); } }
您无法初始化依赖于该类的另一个字段的字段。
来自C#语言规范 10.5.5:
字段声明可能包括变量初始值设定项。 对于静态字段,变量初始值设定项对应于在类初始化期间执行的赋值语句。 对于实例字段,变量初始值设定项对应于在创建类的实例时执行的赋值语句。
和
§10.5.4中描述的默认值初始化适用于所有字段,包括具有可变初始值设定项的字段。 因此,当初始化类时,首先将该类中的所有静态字段初始化为其默认值,然后以文本顺序执行静态字段初始值设定项。 同样,当创建类的实例时,首先将该实例中的所有实例字段初始化为其默认值,然后以文本顺序执行实例字段初始化程序。
所以,在你的代码中, a
在class
之前没有被初始化,尽管我认为编译器不关心是按字母顺序排在前面还是之后。 它只是不允许您使用一个实例变量来初始化另一个。