C# 类型为';的未处理异常;System.StackOverflowException';发生

C# 类型为';的未处理异常;System.StackOverflowException';发生,c#,C#,我收到错误在我的代码中Forte Sender.exe中发生类型为“System.StackOverflowException”的未处理异常。我理解这意味着在我的代码中有一个无限循环,但我似乎找不到这个循环。这是我的密码: 表格1: public partial class MainBox : Form { //Making a name for the ApplicationProperties form. It can be opened when called. Appli

我收到错误在我的代码中Forte Sender.exe中发生类型为“System.StackOverflowException”的未处理异常。我理解这意味着在我的代码中有一个无限循环,但我似乎找不到这个循环。这是我的密码:

表格1:

public partial class MainBox : Form
{
    //Making a name for the ApplicationProperties form. It can be opened when called.
    ApplicationProperties ApplicationPropertiesWindow = new ApplicationProperties();
    //All of the functions for form1 below.
表格2:

public partial class ApplicationProperties : Form
{
    MainBox MainBoxWindow = new MainBox();
    //All of the funcitons for form2 below.

所以我注意到如果我取出
MainBox MainBoxWindow=newmainbox()程序将正确运行。但我需要那个实例来调用Form1中的函数。我怎样才能避开这个问题?调用函数或解决无限循环的不同方法。

好的,
MainBox
创建一个
ApplicationProperties
,然后创建一个
MainBox
,创建一个
ApplicationProperties
,依此类推。显然你需要打破这个循环

由于您的代码目前处于运行状态,您可能希望删除属性表单的
newmainbox()
,然后将其插入,例如:

ApplicationProperties ApplicationPropertiesWindow = new ApplicationProperties();
ApplicationPropertiesWindow.MainBoxWindow = this;


嗯,您的
MainBox
创建了一个
ApplicationProperties
,这反过来又创建了一个
MainBox
,它创建了一个
ApplicationProperties
,依此类推。显然你需要打破这个循环

由于您的代码目前处于运行状态,您可能希望删除属性表单的
newmainbox()
,然后将其插入,例如:

ApplicationProperties ApplicationPropertiesWindow = new ApplicationProperties();
ApplicationPropertiesWindow.MainBoxWindow = this;


你只需打开一个表单,它就会从它的构造函数中打开另一个表单,然后在t的构造函数中再次打开第一个表单,以此类推


创建实例时,字段初始值设定项在构造函数之前执行。

您只需打开一个表单,它就会从构造函数中打开另一个表单,然后在t的构造函数中再次打开第一个表单,依此类推


创建实例时,字段初始值设定项在构造函数之前执行。

您的
ApplicationProperties
类创建一个
MainBox
对象,而
MainBox
对象创建一个
ApplicationProperties
对象。这是循环。对
new
的每次调用都是该循环中的另一个构造函数调用。构造函数以称为相互递归的方式相互调用,这会导致堆栈溢出。

您的
ApplicationProperties
类创建一个
MainBox
对象,而
MainBox
对象创建一个
ApplicationProperties
对象。这是循环。对
new
的每次调用都是该循环中的另一个构造函数调用。构造函数在术语上相互调用,称为相互递归,这将导致堆栈溢出。

您正在
ApplicationProperties
内部创建
MainBox
ApplicationProperties
内部
MainBox
这将继续创建实例,从而产生
StackOverFlowException


为了避免这种情况,您可以在
OnLoad
overrided方法中创建实例,但是创建相互关联的实例没有意义,您是想使用相同的引用吗?

您正在创建
MainBox
内部
ApplicationProperties
ApplicationProperties
内部
MainBox
这将继续创建实例,从而产生
StackOverFlowException


为了避免这种情况,您可以在
OnLoad
overrided方法中创建实例,但是创建相互关联的实例是没有意义的,您的意思是使用相同的引用吗?

答案解释得很好,谢谢。这对我来说很好。非常好的解释了答案,谢谢。这对我来说太棒了。