Есть ли способ сделать каждый класс, реализующий интерфейс Ae, списком одного из конкретных классов, реализующих Ba как свойство?

  • У меня есть интерфейс (Ae), в котором есть список объектов (List) из другого интерфейса (Ba).
  • У меня есть класс, реализующий интерфейс Ae.
  • У меня есть несколько классов, реализующих интерфейс Ba.

Есть ли способ сделать каждый класс, реализующий интерфейс Ae, списком одного из конкретных классов, реализующих Ba как свойство?

public interface IQuestion
{
    IAnswerOption[] Answers { get; set; }
}

public interface IAnswerOption
{
    int Id { get; }
    bool IsCorrect { get; set; }
}

public class AnswerOptionText : IAnswerOption
{
    public int Id { get; }
    public bool isCorrect;
    public string ansText;
}

public class AnswerOptionImage : IAnswerOption
{
    public int Id { get; }
    public bool isCorrect;
    public string imgSlug;
}

public class AudioQuestion : IQuestion
{
    public AnswerOptionImage[] Answers;
    public string audioName;
}

public class TextQuestion : IQuestion
{
    public AnswerOptionText[] Answers { get; set; }
    public string questionText { get; set; }
}

Когда я пробую его, AudioQuestion и TextQuestion не позволяют мне использовать AnswerOptionImage[] и AnswerOptionText[] соответственно.

Visual Studio говорит, что мне нужно реализовать член интерфейса IQuestion.Answers, но я не собираюсь этого делать.

Если кто-то может мне помочь, буду очень благодарен. Спасибо.

1 ответ

Решение

Кажется, что использование дженериков для вашегоIQuestion интерфейс подойдет:

public interface IQuestion<T> where T: IAnswerOption
{
    T[] Answers { get; set; }
}

public class AudioQuestion : IQuestion<AnswerOptionImage>
{
    public AnswerOptionImage[] Answers{ get; set; }
    public string audioName;
}

public class TextQuestion : IQuestion<AnswerOptionText>
{
    public AnswerOptionText[] Answers { get; set; }
    public string questionText { get; set; }
}
Другие вопросы по тегам