下面是一个简单的代码,我声明了一个变量startingMileage
,并在方法中为它赋值。
但是我收到以下错误:
字段初始值设定项不能引用非静态字段,方法或属性
public partial class Form1 : Form
{
int startingMileage;
//I get the error if I directly assign value like this:
//int startingMileage = (int)numericUpDown1.Value;
double reimburseRate = 0.39; //here I can directly assign value to variable
private void button1_Click(object sender, EventArgs e)
{
startingMileage = (int)numericUpDown1.Value; // assign the value inside method is ok
}
}
我的问题是:为什么我不能直接将该值分配给它?
答案 0 :(得分:3)
正如错误消息所示,numericUpDown1.Value是Form类的非静态字段(numericUpDown1)的属性,它在赋值执行时没有值,但0.39是常量,可以分配给它这个领域随时都有。
此外,如果编译器允许您编译该代码,您将获得运行时异常,因为UI控件(例如numbericUpDown1)在Form Constructor(InitializeComponent方法)中实例化,该方法在Form类的字段初始化之后执行。
如果合并设计器代码,它将如下所示:
public partial class Form1 : Form {
NumbericUpDown numericUpDown1;
int startingMileage = (int)numericUpDown1.Value;
double reimburseRate = 0.39;
..
..