C#Visual Studio 2017中的System.StackOverflowException

C#Visual Studio 2017中的System.StackOverflowException,c#,C#,我得到以下错误: System.StackOverflowException:引发了“System.StackOverflowException”类型的异常 该错误发生在声明了employee1、employee2和employee3的程序下。其他一切似乎都正常工作,但无法找到答案,因为程序不会在当前错误下运行。他们的命名消息在类部分,但由于systemoverflow错误,我没有动力去解决这些简单的问题;此外,即使有这些消息,程序仍然倾向于运行。例如:公共字符串名称应为公共字符串名称/部门/I

我得到以下错误:

System.StackOverflowException:引发了“System.StackOverflowException”类型的异常

该错误发生在声明了
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
与“数据”分开,这是一个无休止的递归。简言之,停止那样做,你会没事的。