【问题标题】:Is there any way to make each class that implements interface Ae has a List of one of the concrete classes that implement Ba as property?有没有办法让每个实现接口 Ae 的类都有一个将 Ba 实现为属性的具体类的列表?
【发布时间】:2020-12-02 17:22:49
【问题描述】:
  • 我有一个接口 (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; }
}

当我尝试时,AudioQuestionTextQuestion 不允许我使用 AnswerOptionImage[]AnswerOptionText[] 分别。

Visual Studio 说我需要实现接口成员 IQuestion.Answers,但这不是我想要的。

如果有人可以帮助我,我将不胜感激。谢谢。

【问题讨论】:

    标签: c# implements concreteclass interface-class


    【解决方案1】:

    似乎为您的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; }
    }
    

    【讨论】:

    • 谢谢。想象一下,将来我希望 TextQuestion 类同时接收 AnswerOptionText[] 和 AnswerOptionImage[]。这样做的最佳方法是什么?你有什么建议?
    • @DiogoFerreira 因为在 C# ATM 中没有内置可区分联合,您可以尝试实现某种 OneOf&lt;T1, T2&gt; 类型(其中多个具有不同数量的参数)或使用您当前的允许任何答案类型。
    • 我不明白 OneOf 是什么意思(我在哪里可以看到更多信息?)。如何使用我当前的允许任何答案类型?这已经足够了 public class TextQuestion : IQuestion?很抱歉这些问题,但我是一个初学者,这一切都让我感到困惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多