使用C#进行多重继承

时间:2012-07-02 06:51:39

标签: c# asp.net

  

可能重复:
  c# multiple inheritance

我只是使用Asp.net创建一个简单的应用程序,这里有3个类User, Staff, Student。在User课程中,我有UserName, Password, Email and MobileStaff and StudentGeneral details like FirstName, MiddleName, LastName as well as Email, Mobile等属性。

每当我添加新员工或学生时,我都要为他们创建一个用户帐户。

所以在User类中,我尝试继承Staff类,以便我可以从Staff中访问User类中的属性。

成功添加人员数据后,我需要在用户类中调用Add(我已经有这个)方法,该方法将为员工创建一个用户帐户及其数据。

还有一件事,我知道C#不支持多重继承,这里我需要继承Staff和Student类。我怎么能这样做。

任何人都可以帮助我。

6 个答案:

答案 0 :(得分:9)

好的,很高兴看到很多帖子都来自那些证明他们为什么要阅读OO书籍的人。

这里没有继承 - 这是一个经典的例子,其中继承是反模式。

相反,您应该拥有基于角色的模型。

用户(或实体)拥有ROLES集合。 角色是/可以是:员工,学生和其他任何东西。

这允许角色有时间限制,但也允许角色更改(后来被雇用的员工)。它允许将所有相关信息附加到角色类,而不是在User类上使用空间。

它不是那么罕见 - 像Windows文件系统这样的元素具有基于角色的安全性超过10年。使用继承来解决这个问题(并打开十几个新问题)是一种经典的反模式,因为它只是错误的方法。

唯一更糟的是你将User作为子类而不是基类,但是再次:这根本不是继承的情况。

答案 1 :(得分:4)

您的“继承”是向后的 - StaffStudent需要延长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
}