有没有办法使实现接口Ae的每个类都具有将Ba实现为属性的具体类之一的列表?

问题描述

  • 我有一个接口(Ae),其中有一个来自另一个接口(Ba)的对象列表(List)。
  • 我有一个实现接口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,但这不是我想要的。

如果有人可以帮助我,我将非常感激。谢谢。

解决方法

IQuestion界面上使用generics似乎是一个不错的选择:

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...