C# 如何从子类创建超类的实例?

C# 如何从子类创建超类的实例?,c#,oop,C#,Oop,假设我的系统中有两种类型的用户,教师和学生。现在,教师和学生数据都存储在用户表中。因此,我有一个类User,它对应于表User 然后我创建了两个类,Teacher和Student,它们继承自User。除了有一些额外的属性和方法外,这些类使代码更清晰。(我比用户对象更了解教师对象。在教师的默认Ctor中,我将UserType等字段设置为教师的默认值) 现在我主要在api/表示层/服务层使用教师/学生对象。但是对于数据访问层,我必须传递一个User对象,因为它是存储在Users表中的对象。因此,我需

假设我的系统中有两种类型的用户,教师和学生。现在,教师和学生数据都存储在用户表中。因此,我有一个类User,它对应于表User

然后我创建了两个类,Teacher和Student,它们继承自User。除了有一些额外的属性和方法外,这些类使代码更清晰。(我比用户对象更了解教师对象。在教师的默认Ctor中,我将UserType等字段设置为教师的默认值)

现在我主要在api/表示层/服务层使用教师/学生对象。但是对于数据访问层,我必须传递一个User对象,因为它是存储在Users表中的对象。因此,我需要从教师/学生对象获取用户对象

我想避免编写代码将每个属性从教师复制到用户,我想知道其他人是如何做到这一点的


还有,有没有更好的方法来设计它,而不是让教师/学生单独上课?

如果它们是从用户派生的,那么这就不重要了。您可以将数据访问设计为接收用户,因为学生或教师是用户,所以它可以正常工作

因此,给定此函数声明:

public void SaveUser(User user){
   //Save a user baby!!!
}
那么这个代码是完全有效的:

var myStudent = new Student();
var myTeacher = new Teacher();

SaveUser(myStudent);
SaveUser(myTeacher);

还是我遗漏了什么?

SaveUser请求一个User对象,myStudent和myTeacher都是,所以这似乎是对的,我相信这会抛出一个InvalidCastException。因为学生和教师是派生类型,所以我们可以将用户强制转换为教师,但不能将用户强制转换为教师。不,它不会抛出强制转换异常,因为学生和教师是用户对象。根本没有必要投。这正是遗传和多态性被设计用来解决的问题。啊,我刚刚意识到我问了另一个问题。我的意思是,如果我的DAL中有一个返回用户的方法,我将无法将用户强制转换为教师或学生。那么我该如何应对呢?有更好的设计吗?