c# - 一个类可以有 2 个属性,其中只能填充 1 个吗?
问题描述
我有一个名为 的类Person
,一个人可以是 aStudent
或 a Teacher
。
该类Person
包含姓名、生日和电子邮件地址等基本属性。
该Teacher
课程包含教师编号、他们加入学校的日期和所教科目等属性。
包含学生编号、他们所在的Student
当前班级和平均成绩等属性。
两者都Teacher
应该Student
继承属性Person
了。通常我会给Teacher
和Student
一个链接到 的属性Person
,但这一次不行。
我需要能够创建一个Person
对象并将其与其他类一起使用,并且 aPerson
只能是Teacher
or 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)));
提前致谢
解决方案
如果你想让一个类继承另一个类的属性,你应该使用继承,假设你不代表 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
}
推荐阅读
- laravel - Laravel Eloquent 一-> 多关系分配父
- react-native - 如何防止 React Navigation 中的 Drawer Navigator 刷新?
- laravel - 如何为 oneToMany 关系实现类似结构的附加/分离?
- php - Ext JS 阻止 Excel 文件下载
- angular - Angular 4 中 [ngClass]="computeClass()" 和 class="{{computeClass()}}" 之间的区别
- python - 从句子中提取/解析代词-代词和动词-名词/代词组合
- haskell - 寻找包含最后一个元素的诸如 break 之类的函数
- caching - CakePHP 3.x ORM 如何在不明确定义的情况下知道要读取哪个缓存文件?
- android - 具有 FrameLayout 和 15 ImageButton 的 RelativeLayout 崩溃
- sql - SQL 评估查询