0

重複の可能性:
c# 多重継承

Asp.net を使用して単純なアプリケーションを作成しているだけです。ここには 3 つのクラスがありますUser, Staff, Student。クラスには、とクラスのUserようなプロパティがUserName, Password, Email and Mobileあります。Staff and StudentGeneral details like FirstName, MiddleName, LastName as well as Email, Mobile

ここでは、新しいスタッフまたは学生を追加するたびに、それらのユーザー アカウントを作成する必要があります。

そのため、User クラスでは、Staff クラスを継承して、Staff から User クラスのプロパティにアクセスできるようにしました。

スタッフ データを正常に追加した後Add、ユーザー クラスのメソッド (既に持っています) を呼び出す必要があります。このメソッドは、スタッフのデータを使用してスタッフのユーザー アカウントを作成します。

もう 1 つ、C# は多重継承をサポートしていないことを知っています。ここでは、Staff クラスと Student クラスの両方を継承する必要があります。これどうやってするの。

誰でもここで私を助けることができますか?

4

6 に答える 6

9

OK、オブジェクト指向に関する本を読むべき理由を示す人々からの非常に多くの投稿を見ることができてうれしいです。

ここには継承は含まれていません。これは、継承がアンチパターンではない古典的な例です。

代わりに、役割ベースのモデルが必要です。

ユーザー (またはエンティティ) には、ROLES のコレクションがあります。役割は、スタッフ、学生、その他何でもかまいません。

これにより、役割を時間制限することができますが、役割の変更も許可されます (後でスタッフとして採用される学生)。User クラスのスペースを使い果たす代わりに、すべての関連情報をロール クラスにアタッチできます。

それはそれほど珍しいことではありません.Windowsファイルシステムのような要素は、10年以上にわたってロールベースのセキュリティを持っています. この問題を解決する (そして多数の新しい問題を開く) ための継承の使用は、単に間違ったアプローチであるため、古典的なアンチパターンです。

唯一の悪い点は、基本クラスではなくサブクラスとして User があったことですが、繰り返しますが、これは継承の場合ではありません。

于 2012-07-02T07:04:44.337 に答える
4

あなたの「継承」は逆Staffであり、その逆ではなく、Student拡張する必要がありUserます。

于 2012-07-02T06:55:27.550 に答える
4

新しいStaffまたはStudentを追加するたびに、ユーザー アカウントを作成する必要があると言っています。では、その逆ではなく、 StaffユーザーとStudentユーザーを作成してみませんか? つまり、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

あなたがやりたいことのために、代わりに2つのインターフェースを使用してください。しかし、彼らは正しいです。スタッフと学生は両方ともユーザーであるため、ユーザーから継承する必要があります。

于 2012-07-02T06:58:26.950 に答える