首页 > 解决方案 > 一个类可以有 2 个属性,其中只能填充 1 个吗?

问题描述

我有一个名为 的类Person,一个人可以是 aStudent或 a Teacher

该类Person包含姓名、生日和电子邮件地址等基本属性。

Teacher课程包含教师编号、他们加入学校的日期和所教科目等属性。

包含学生编号、他们所在的Student当前班级和平均成绩等属性。

两者都Teacher应该Student继承属性Person了。通常我会给TeacherStudent一个链接到 的属性Person,但这一次不行。

我需要能够创建一个Person对象并将其与其他类一起使用,并且 aPerson只能是Teacheror Student。如果有其他方法,请告诉我。

我的想法是这样的,但我不知道是否有办法:

class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string PhoneNumber { get; set; }

    //Like this
    public Teacher T { get; set; } || public Student S { get; set; }
}

然后我可以这样声明:

//For teacher
Person person = new Person(1, "Hans", "Klok", "0636257135", new Teacher(attributes here)));

//For student
Person person = new Person(1, "Hans", "Klok", "0636257135", new Student(attributes here)));

提前致谢

标签: c#class

解决方案


如果你想让一个类继承另一个类的属性,你应该使用继承,假设你不代表 SQL 表。

class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string PhoneNumber { get; set; }
}

class Teacher : Person
{
    // Teacher specific props
}

class Student : Person
{
    // Teacher specific props
}

调用它

Student person = new Student(1, "Hans", "Klok", "0636257135"); //assuming you added constructor;

如果您想使用 EntityFramework 表示 1-1 关系,一种方法是在教师和学生模型上使用 PersonId。然后使用 EntityFramework 的 fluent API,对 PeopleId 设置唯一约束。

class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string PhoneNumber { get; set; }
}

class Teacher
{
    public int Id { get; set; }
    public int PersonId { get; set; }
    // Teacher specific props
}

class Student
{
    public int Id { get; set; }
    public int PersonId{ get; set; }
    // Teacher specific props
}

推荐阅读