可能重复:
c# multiple inheritance
我只是使用Asp.net创建一个简单的应用程序,这里有3个类User, Staff, Student
。在User
课程中,我有UserName, Password, Email and Mobile
和Staff and Student
班General details like FirstName, MiddleName, LastName as well as Email, Mobile
等属性。
每当我添加新员工或学生时,我都要为他们创建一个用户帐户。
所以在User类中,我尝试继承Staff类,以便我可以从Staff中访问User类中的属性。
成功添加人员数据后,我需要在用户类中调用Add
(我已经有这个)方法,该方法将为员工创建一个用户帐户及其数据。
还有一件事,我知道C#不支持多重继承,这里我需要继承Staff和Student类。我怎么能这样做。
任何人都可以帮助我。
答案 0 :(得分:9)
好的,很高兴看到很多帖子都来自那些证明他们为什么要阅读OO书籍的人。
这里没有继承 - 这是一个经典的例子,其中继承是反模式。
相反,您应该拥有基于角色的模型。
用户(或实体)拥有ROLES集合。 角色是/可以是:员工,学生和其他任何东西。
这允许角色有时间限制,但也允许角色更改(后来被雇用的员工)。它允许将所有相关信息附加到角色类,而不是在User类上使用空间。
它不是那么罕见 - 像Windows文件系统这样的元素具有基于角色的安全性超过10年。使用继承来解决这个问题(并打开十几个新问题)是一种经典的反模式,因为它只是错误的方法。
唯一更糟的是你将User作为子类而不是基类,但是再次:这根本不是继承的情况。
答案 1 :(得分:4)
您的“继承”是向后的 - Staff
和Student
需要延长User
,而不是相反。
答案 2 :(得分:4)
您说无论何时添加新的员工或学生,都必须创建用户帐户。那么,为什么不让员工和学生用户而不是相反?即员工和学生继承自用户。
答案 3 :(得分:3)
正如其他人指出的那样,你有向后的继承。
结构应如下所示:
class User
{
// User members
}
class Staff : User
{
//Staff members, User members inherited
}
class Student : User
{
// Student members, User members inherited
}
答案 4 :(得分:1)
对于您想要做的事情,请使用两个接口。 但他们是对的,你的员工和学生应该继承用户,因为他们都是用户。
答案 5 :(得分:1)
public abstract class User
{
public string Username{get;set;}
public string Password{get;set;}
public string Email{get;set;}
public string Mobile{get;set;}
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class Student : User
{
//other properties and methods
}
public class Staff : User
{
//other properties and methods
}