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;
}
}
答案 0 :(得分:3)
只需将class1
的初始化移动到构造函数中:
class Form1 {
int a = 0;
Class1 obj1;
public Form1() {
obj1 = new Class1(a);
}
}
答案 1 :(得分:1)
您无法初始化依赖于该类的其他字段的字段。
来自C# Language Specification 10.5.5:
字段声明可能包含变量初始值设定项。对于静态 字段,变量初始值设定项对应于赋值语句 在类初始化期间执行。例如字段, 变量初始值设定项对应于赋值语句 在创建类的实例时执行。
和
§10.5.4中描述的默认值初始化适用于所有人 字段,包括具有可变初始值设定项的字段。因此,当一个 class已初始化,该类中的所有静态字段都是第一个 初始化为默认值,然后是静态字段 初始化程序以文本顺序执行。同样,当一个实例 创建一个类,该实例中的所有实例字段都是第一个 初始化为其默认值,然后是实例字段 初始化程序以文本顺序执行。
因此,在您的代码中,a
未在class
之前初始化,尽管我不认为编译器会关注字母顺序之前还是之后。它只是不允许您使用一个实例变量来初始化另一个。