积极答复者
请教高手!关于变量传递的问题!

问题
-
在Form2(下面的代码)中的变量t和数组A要在Form1中调用,但通过下面的语句为什么不能将通过button1_Click赋给t的值传递到数组A的长度中呢?请教高手赐教!
namespace aaa
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public static int t;public void button1_Click(object sender, EventArgs e)
{
if (numericUpDown1.Value != 0)
{t = Convert.ToInt32(numericUpDown1.Value);
}
else
MessageBox.Show("请输入数值");
MessageBox.Show(t.ToString());}
public static string[] A = new string[t];
private void button3_Click(object sender, EventArgs e)
{
MessageBox.Show(A.Length.ToString());
}
}
}
答案
全部回复
-
你好!
这个问题涉及到静态变量的初始化,实际上静态变量是在编译器自动为类产生的静态构造器中初始化的,这个静态构造器是在类第一次被访问时就被调用了,回到你的问题,在Form2类第一次被访问之前,已经调用了静态构造器(在第一个实例被创建之前),这时由于你并没有为t进行初始化,所以t被初试化为0,这时A被初始化为一个0长的数组,然后Form2才被实例化,然后你按button1按钮,t确实被赋值为你输入的值,但这跟A的初始化已经没有关系了,A的初始化已经在静态构造器中执行完毕了。所以你的t值没有赋给A作为数组的长度。背后的原理就是这样。
有些时候事情并不像我们看到的那样!但是一切奇怪的现象背后都有他的道理。
希望以上回答对你有帮助!