C#Visual Studio 2017中的System.StackOverflowException
我得到以下错误: System.StackOverflowException:引发了“System.StackOverflowException”类型的异常 该错误发生在声明了C#Visual Studio 2017中的System.StackOverflowException,c#,C#,我得到以下错误: System.StackOverflowException:引发了“System.StackOverflowException”类型的异常 该错误发生在声明了employee1、employee2和employee3的程序下。其他一切似乎都正常工作,但无法找到答案,因为程序不会在当前错误下运行。他们的命名消息在类部分,但由于systemoverflow错误,我没有动力去解决这些简单的问题;此外,即使有这些消息,程序仍然倾向于运行。例如:公共字符串名称应为公共字符串名称/部门/I
employee1
、employee2
和employee3
的程序下。其他一切似乎都正常工作,但无法找到答案,因为程序不会在当前错误下运行。他们的命名消息在类部分,但由于systemoverflow错误
,我没有动力去解决这些简单的问题;此外,即使有这些消息,程序仍然倾向于运行。例如:公共字符串名称应为公共字符串名称/部门/IDNumber/Position
类别:
public partial class Employme
{
private string _name;
private decimal _idNumber;
private string _department;
private string _position;
public Employme(string name, decimal idNumber, string department, string position)
{
_name = name;
_idNumber = idNumber;
_department = department;
_position = position;
}
public Employme(string name, decimal idNumber)
{
_name = name;
_idNumber = idNumber;
_department = "";
_position = "";
}
public string name
{
set { _name = value; }
get { return _name; }
}
public decimal idNumber
{
set { _idNumber = value; }
get { return _idNumber; }
}
public string department
{
set { _department = value; }
get { return _department; }
}
public string position
{
set { _position = value; }
get { return _position ;}
}
}
节目:
public partial class Employme : Form
{
private Employme employee1 = new Employme("Susan Myers", 47899, "Accounting", "Vice President");
private Employme employee2 = new Employme("Mark Jones", 39119, "IT", "Programmer");
private Employme employee3 = new Employme("Joy Rogers", 81774, "Manufacturing", "Engineer");
public Employme()
{
_name = "";
_idNumber = 0;
_department = "";
_position = "";
InitializeComponent();
}
private void Employme_Load(object sender, EventArgs e)
{
}
private void displayButton_Click(object sender, EventArgs e)
{
susanTextBox.Text = employee1.name + "," + employee1.idNumber + "," + employee1.department + "," + employee1.position;
markTextBox.Text = employee2.name + "," + employee2.idNumber + "," + employee2.department + "," + employee2.position;
joyTextBox.Text = employee3.name + "," + employee3.idNumber + "," + employee3.department + "," + employee3.position;
}
}
从表单继承的类的名称不应与从第一个代码段继承的类的名称相同。因为这两个代码段构成了同一个类,每次调用构造函数来创建Employme实例时,您在初始化私有字段时创建了同一Employme的其他3个实例,在从原始构造函数调用获得代码之前再调用构造函数3次,这3次调用中的每一次都会初始化更多的私有字段,多次调用构造函数,以此类推,直到得到异常
若要修复,请重命名其中一个类。如果重命名从窗体继承的类,还可以从其构造函数中删除赋值。从窗体继承的类的名称不应与从第一个代码段继承的类的名称相同。因为这两个代码段构成了同一个类,每次调用构造函数来创建Employme实例时,您在初始化私有字段时创建了同一Employme的其他3个实例,在从原始构造函数调用获得代码之前再调用构造函数3次,这3次调用中的每一次都会初始化更多的私有字段,多次调用构造函数,以此类推,直到得到异常
若要修复,请重命名其中一个类。如果您重命名从表单继承的类,还可以从其构造函数中删除赋值。每个
employeeme
实例都会尝试实例化另外三个实例(employee1
,employee2
,employee3
)。这些实例中的每一个都试图实例化另外三个实例,以此类推通常,“堆栈溢出”发生在“无止境的循环”中(可以是明显的,也可以是隐藏的,比如在本例中)。我建议您将表单
Employme
与“数据”分开,这是一个无休止的递归。简而言之,停止这样做,你应该会没事。employee
的每个实例都会尝试再实例化三个实例(employee1
,employee2
,employee3
)。这些实例中的每一个都试图实例化另外三个实例,以此类推通常,“堆栈溢出”发生在“无止境的循环”中(可以是明显的,也可以是隐藏的,比如在本例中)。我建议您将表单
Employme
与“数据”分开,这是一个无休止的递归。简言之,停止那样做,你会没事的。