当我尝试在表单类中创建表单类的对象时,它会在发生stackoverflow时给出异常.但是,当我在方法中声明表单类的对象时,它工作正常.代码如下:
namespace WindowsFormsApplication6
{
public partial class Form1 : Form
{
**Form1 f1 = new Form1();**//gives stackoverflow exception.......
char[] ar = new char[15];
int flag = 0, end;
double val1, val2, res;
string oprt;
public Form1()
{
InitializeComponent();
}
private void masters(object sender, EventArgs e)
{
ar[i] = char.Parse(((Button)sender).Text);
if (char.IsDigit(ar[i]))
{
if (flag != 0)
{
if (textBox1.Text == oprt)
{
textBox1.Clear();
}
}
else
{
if (end == 1)
{
textBox1.Clear();
end = 0;
}
}
Button ansbox = sender as Button;
textBox1.Text += ansbox.Text;
}
else if (char.IsSymbol(ar[i]))
{
if (textBox1.TextLength != 0)
{
val1 = double.Parse(textBox1.Text);
textBox1.Clear();
Button bt = sender as Button;
if (bt != null)
textBox1.Text = bt.Text;
oprt = bt.Text;
// dot.Enabled = true;
flag = 1;
}
}
}
private void button14_Click(object sender, EventArgs e)
{
if (textBox1.TextLength != 0)
{
val2 = double.Parse(textBox1.Text);
switch (oprt)
{
case "+": res = val1 + val2;
break;
case "-": res = val1 - val2;
break;
case "*": res = val1 * val2;
break;
case "/": res = val1 / val2;
break;
}
textBox1.Text = res.ToString();
flag = 0;
end = 1;
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
创建Form1的实例将导致f1属性使用Form1的实例进行初始化,这将导致使用Form1的实例初始化f1属性,这将导致使用Form1的实例初始化f1属性,这将导致要使用Form1实例初始化的f1属性,该实例将导致使用Form1实例初始化f1属性,这将导致使用Form1实例初始化f1属性,这将导致f1属性使用实例初始化Form1的一个实例将导致f1属性初始化,这将导致f1属性初始化为Form1的实例,这将导致f1属性初始化为Form1的实例,这将导致f1属性初始化使用Form1的实例会导致f1属性使用Form1的实例初始化,这将导致f1属性初始化为Form1的实例,这将... Stack Overflow!
在类中的方法中,'f1'将是本地的,并且仅在调用的生命周期中存在.除非您在实例化的Form1上调用相同的方法,否则不会创建后续的Form1.
创建 Form1 时,您正在创建 Form1 的私有实例,因此这是一种无限循环:
在代码中的某个位置,您创建了第一个 Form1 实例。创建此实例时,它会创建 Form1 的新实例。该实例还创建了 Form1 的实例,然后又创建了一个实例,等等。
因此,当创建实例时,所有变量都会被初始化,并且当您像这样声明它们时:
Form1 f1 = new Form1()这会自动实例化表单的新实例。
我建议您在 Form1 中没有 Form1 的新实例,但如果您确实需要它,请创建一个方法来创建该实例:
将 更改Form1 f1 = new Form1();为Form1 f1;. 并创建一个方法:
public void InstantiateNewForm1Instance()
{
f1 = new Form1();
}
Run Code Online (Sandbox Code Playgroud)
但是:不要在构造函数中调用此方法!否则你也会遇到同样的问题:-)
| 归档时间: |
|
| 查看次数: |
809 次 |
| 最近记录: |