【问题标题】:Trouble with Inheritance, getting NULL on some data from inherited class继承问题,从继承类的某些数据上获取 NULL
【发布时间】:2013-12-10 11:15:51
【问题描述】:

我有两节课。一个叫做人另一个学生。学生从人继承。 在我填写表格并将数据传递到下一个表格进行显示之前,一切正常。

除了姓名、地址和州外,一切都正常显示。这些来自 person 类并且具有 NULL 值。让我发疯的是,城市、邮政编码和出生日期来自同一个人班级并且工作得很好。我不明白为什么会发生这种情况,希望有更多知识的人可以为我指明正确的方向。

这里有 2 个类:

public class Person
{
    private string name;
    private string address;
    private string city;
    private string state;
    private string zipcode;
    private DateTime birthdate;

    public Person()
    {
    }

    public Person(string name, string address, string city, string state, string zipcode, DateTime birthdate)
    {
        this.name = name;
        this.address = address;
        this.city = city;
        this.state = state;
        this.zipcode = zipcode;
        this.birthdate = birthdate;
    }

    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    public string Address
    {
        get { return address; }
        set { name = address; }
    }

    public string City
    {
        get { return city; }
        set { city = value; }
    }
    public string State
    {
        get { return state; }
        set { state = value; }
    }

    public string Zipcode
    {
        get { return zipcode; }
        set { zipcode = value; }
    }

    public DateTime Birthdate
    {
        get { return birthdate; }
        set { birthdate = value; }
    }
}

public class Student : Person
{
    private string studentID;
    private double gradepointAverage;
    private List<string> currentClasses = new List<string>();

    public Student()
    {
    }

    public Student(string name, string address, string city, string state, string zipcode, DateTime birthdate, string studentID, double gradepointAverage, List<string> currentClasses)
        : base(name, address, city, state, zipcode, birthdate)
    {
        this.studentID = studentID;
        this.gradepointAverage = gradepointAverage;
        this.currentClasses = currentClasses;
    }

    public string StudentID
    {
        get { return studentID; }
        set { studentID = value; }
    }

    public double GradePointAverage
    {
        get { return gradepointAverage; }
        set { gradepointAverage = value; }
    }

    public List<string> CurrentClasses
    {
        get { return currentClasses; }
        set { currentClasses = value; }
    }
}

这里是我实例化类的地方:

private void btnSave_Click(object sender, EventArgs e)
    {
        s = new Student();
        s.StudentID = txtStudentID.Text;
        s.Name = txtName.Text;
        s.Address = txtAddress.Text;
        s.City = txtCity.Text;
        s.State = txtState.Text;
        s.Zipcode = txtZipCode.Text;
        s.Birthdate = DateTime.Parse(txtBirthdate.Text);
        s.GradePointAverage = Convert.ToDouble(txtGradPoint.Text);


        string stringItmem;
        foreach(Object selectedItem in lstClasses.SelectedItems)
        {
            stringItmem = selectedItem as String;
            s.CurrentClasses.Add(stringItmem);
        }
        students.Add(s);
        resetForm();
        MessageBox.Show("Student has been saved.");
    }

【问题讨论】:

  • 您使用哪个构造函数来实例化您的Student?您是否使用带有所有参数的那个并将所有参数传递给基类?您是否尝试设置断点并调试应用程序?
  • 我正在实例化 Student ,然后单独设置它们。我使用了调试器,它在所有提到的字段中都显示为 null。我设置打破我将 Student s 传递到学生列表中的位置,并且那里对他们来说已经是空的。
  • 那么,您的问题是您的学生的值没有从您的输入中正确设置(即值不应该是“空”),还是空值在下一个表格?抱歉,从您的问题中不清楚您的问题到底是什么。
  • 我的输入没有从表单中正确设置。即使输入了数据,名称、地址和状态也会显示为空。来自同一父类的城市、邮政编码和出生日期可以正常工作并显示在显示表单中。这就是为什么我很困惑。他们不应该都有同样的问题吗?

标签: c# winforms inheritance


【解决方案1】:
public string Address
{
    get { return address; }
    set { name = address; }   // Should be "address = value"
}

查看设置器 - 您在这里所做的是破坏您的 name 而不设置 address。这应该可以解释您所有的数据损坏。由于您首先在代码中设置了name,这就解释了为什么它们都是null

【讨论】:

  • 是的......复制/粘贴再次获胜(松散):)
  • 当我没看到。谈论在路上看不到树木和森林。谢谢
【解决方案2】:

您的地址的问题在于,在集合中您将其设置为 name = address 而不是 address = value;

public string Address
{
    get { return address; }
    set { name = address; }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 2010-10-30
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多