0

可能重复:
c#多重继承

我只是使用 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类。我怎样才能做到这一点。

有人能帮我一下吗。

4

6 回答 6

9

好的,很高兴看到这么多来自人们的帖子,这些帖子都证明了他们为什么应该阅读一本关于 OO 的书。

这里不涉及继承——这是一个经典的例子,继承是一种反模式。

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

用户(或实体)有一个角色集合。角色是/可以是:员工、学生和其他任何人。

这允许角色有时间限制,但也允许角色中的变化(后来被雇用的学生)。它允许将所有相关信息附加到角色类,而不是占用用户类上的空间。

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

唯一更糟糕的是,您将 User 作为子类,而不是基类,但同样:这根本不是继承的情况。

于 2012-07-02T07:04:44.337 回答
4

你的“继承”是倒退的——需要扩展,Staff而不是相反。StudentUser

于 2012-07-02T06:55:27.550 回答
4

您是说,每当您添加新的StaffStudent时,都必须创建一个用户帐户。那么,为什么不让员工学生成为用户而不是反过来呢?即让StaffStudent继承自User

于 2012-07-02T06:55:41.370 回答
3

正如其他人指出的那样,您可以向后继承。

结构应如下所示:

class User
{
    // User members
}

class Staff : User
{ 
    //Staff members, User members inherited
}

class Student : User
{
    // Student members, User members inherited
}
于 2012-07-02T06:58:34.317 回答
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
}
于 2012-07-02T07:01:54.970 回答
1

你想要做的事情是使用两个接口。但他们是对的,您的员工和学生应该从用户继承,因为他们都是用户。

于 2012-07-02T06:58:26.950 回答