2012-07-02 2 views
0

Можно создать дубликат:
c# multiple inheritanceмножественное наследование с использованием C#

Am просто создать простое приложение с помощью 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, чтобы получить доступ к свойствам класса User из Staff.

после добавления данных о персонале успешно, мне нужно вызвать метод(у меня есть уже) в пользовательском классе, который будет создавать учетную запись пользователя для персонала с его данными.

И еще одна вещь, я знаю, что C# не поддерживает множественное наследование, здесь мне нужно наследовать как Staff, так и Student. как я могу это сделать.

Может ли кто-нибудь помочь мне здесь.

+0

Я правильно понял, что вы хотите, чтобы класс User наследовался как от Студента, так и от Персонала? Насколько мне известно, принципы объектной ориентации кажутся неудобными. Обычно более специализированный (Student или Staff) класс должен наследовать от более общего (Пользователь). – mortb

+0

спасибо, я изменю его – shanish

+0

@casperOne Это неправильно закрыто - вопрос, названный как дубликат, является теоретическим и правилен, пример здесь конкретный и НЕ НАСТОЯЩИЙ ВОПРОС КАК НАСЛЕДИЕ - НЕ ОТВЕТ НА ЗДЕСЬ. В результате информация теряется, когда вы закрываете это, а именно, что вы должны решить эту конкретную проблему, не используя наследование, чтобы начать с нее, так как это фактически антипаттерн. Пожалуйста, откройте снова. – TomTom

ответ

4

Ваше «наследство» обращено назад - Staff и Student необходимо удлинить User, а не наоборот.

+1

... или иначе: все сотрудники и студенты должны быть Пользователями, но не все пользователи должны быть Персоналом и Студентами. – Kjartan

+1

AH, нет, извините. Не в течение 20 лет. Нет наследования. – TomTom

+0

О, извините, ур прав, вот и моя ошибка, я сейчас его поменю – shanish

4

Вы говорите, что всякий раз, когда вы добавляете новый Посох или Student, учетная запись пользователя должна быть создана. Итак, почему бы не сделать Персонал и Студенты пользователей, а не наоборот? то есть Персонал и Студент inherit from Пользователь.

+0

сэр, я делаю неправильно, я изменю его – shanish

1

Fo, что вы хотели использовать, вместо этого используют два интерфейса. , но они правы, ваш персонал и ученик должны наследовать от пользователя, потому что они оба являются пользователями.

+0

спасибо Rony, я его поменяю – shanish

3

Как указывалось другими, у вас есть наследство назад.

Структура должна выглядеть следующим образом:

class User 
{ 
    // User members 
} 

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

class Student : User 
{ 
    // Student members, User members inherited 
} 
+0

спасибо Alex, я его поменяю – shanish

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 
} 
9

OK, приятно видеть так много сообщений все от людей, которые демонстрируют, почему они должны прочитать книгу по ОО.

Здесь нет никакого наследования - это классический экзамен, где наследование является na antipattern.

Вместо этого у вас должна быть модель на основе ролей.

У пользователя (или юридического лица) есть коллекция ROLES. Роли являются/могут быть: персонал, студент и все остальное.

Это позволяет ролям ограничить время, но также позволяет ИЗМЕНЕНИЯ В роли (студент, который позже нанимается на персонал).Он позволяет привязать всю соответствующую информацию к классу ролей, а не использовать пространство в классе User.

Это не так, как это необычно. Элементы, такие как файловая система Windows, имеют защиту на основе ролей в течение более 10 лет. Использование Наследования для решения этой проблемы (и открытие десятка новых проблем) является классическим анти-шаблоном, потому что это просто неправильный подход.

Единственное, что хуже, так это то, что у вас был пользователь как подкласс, а не базовый класс, но опять же: это не случай для наследования вообще.

+0

спасибо TomTom для ура ценный совет – shanish

+0

Я был обеспокоен из всех этих ответов, не было эффективного ... +1 для вас! – Polity

+0

Хе-хе, тогда вы * COULD * используйте наследование с ролями, если оно выглядит правильно (например, они используют некоторые распространенные методы). – sventevit

Смежные вопросы