Как заставить подкласс иметь определенный подкласс со свойством суперкласса?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как заставить подкласс иметь определенный подкласс со свойством суперкласса?

Сообщение Anonymous »

Я работаю с EF над созданием приложения MVC на C#. Я хочу, чтобы на разных типах экзаменов были разные типы вопросов. Вот мои абстрактные классы:

Код: Выделить всё

public abstract class Exam
{
public int Id { get; set; }
public string Description { set; get; }

public abstract ICollection GetQuestions();
public abstract void SetQuestions(ICollection questions);
}

public abstract class Question
{
public int Id { get; set; }
public string Description { set; get; }

public abstract Exam getExam();
public abstract void setExam(Exam exam);
}
Обратите внимание, что вместо типичного общедоступного виртуального ICollection в объявлении класса Exam я создал абстрактные методы установки и получения. То же самое относится и к свойству «Экзамен» в классе «Вопрос».
Вот мои конкретные классы экзамена:

Код: Выделить всё

[Table("SingleExam")]
public class SingleExam : Exam
{
public virtual ICollection Questions { get; set; }

public override ICollection GetQuestions() { return Questions as ICollection; }
public override void SetQuestions(ICollection questions)
{
if (!(questions is ICollection))
throw new ArgumentException("You must set single questions.");

Questions = questions as ICollection;
}
}

[Table("MultipleExam")]
public class MultipleExam : Exam
{
public virtual ICollection Questions { get; set; }

public override ICollection GetQuestions() { return Questions as ICollection; }
public override void SetQuestions(ICollection questions)
{
if (!(questions is ICollection))
throw new ArgumentException("You must set multiple questions.");

Questions = questions as ICollection;
}
}
...И мои конкретные классы вопросов:

Код: Выделить всё

[Table("SingleQuestion")]
public class SingleQuestion : Question
{
public int ExamId { get; set; }
public virtual SingleExam Exam { get; set; }

public override Exam getExam() { return Exam; }
public override void setExam(Exam exam)
{
if (!(exam is SingleExam))
throw new ArgumentException("You must set a SingleExam");

Exam = exam as SingleExam;
}
}

[Table("MultipleQuestion")]
public class MultipleQuestion : Question
{
public int ExamId { get; set; }
public virtual MultipleExam Exam { get; set; }

public override Exam getExam() { return Exam; }
public override void setExam(Exam exam)
{
if (!(exam is MultipleExam))
throw new ArgumentException("You must set a MultipleExam");

Exam = exam as MultipleExam;
}
}
Я сделал все это, потому что MultipleQuestion должен иметь только MultipleQuestions, а SingleExam должен иметь только SingleQuestions, точно так же, как MultipleQuestion должен иметь MultipleQuestion, а одиночный вопрос должен иметь SingleExam.
p>
Есть ли лучший способ гарантировать, что подкласс класса «A» содержит или имеет определенный подкласс класса «B» (как в случае с моими экзаменами и вопросами) и имеет доступ к нему через абстрактный класс без абстрактных геттеров и сеттеров?

Подробнее здесь: https://stackoverflow.com/questions/400 ... s-property
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Мой подкласс - это вызывает метод суперкласса, что он не должен быть :(
    Anonymous » » в форуме JAVA
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Мой подкласс - это вызывает метод суперкласса, которым он не должен быть :( [закрыто]
    Anonymous » » в форуме JAVA
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Мой подкласс - это вызывает метод суперкласса, которым он не должен быть :( [закрыто]
    Anonymous » » в форуме JAVA
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • значит это? Является ли подкласс чего -то или суперкласса? [дублировать]
    Anonymous » » в форуме JAVA
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Как заставить некоторые узлы иметь определенный цвет в networkX
    Anonymous » » в форуме Python
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»