Есть ли способ сделать каждый класс, реализующий интерфейс 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; }
}