另一个接口的接口实现覆盖类型

本文关键字:接口 类型 覆盖 另一个 实现 | 更新日期: 2023-09-27 18:06:35

我有一个接口IArticle,有几个实现:ProductType, RawMaterial, PaintType

然后我有一个引用(SKU),它是一个介于IArticleColor之间的复合元素:

public interface IReference
{
    Color Color { get; set; }
    IArticle Article { get; set; }
}

然后我有几个实现,每个都有一个相应的IArticle实现:

  • Product : IReference将有ProductType作为Article
  • SemifinishedGood: IReference将有RawMaterial作为Article
  • Paint : IReference将有PaintType作为Article

所以事情是…我如何覆盖Article类型,像这样:

public class Paint: IReference
{
    public virtual Color Color { get; set; }
    public virtual PaintType Article { get; set; }
}

这样我就可以访问PaintType特定的属性,而不仅仅是IArticle,当我处理Paint.Article而不必每次都强制转换?这个体系结构出了什么问题?

另一个接口的接口实现覆盖类型

泛型类型参数很容易解决这个问题。

public interface IReference<TArticle> where TArticle : IArticle
{
    Color Color { get; set; }
    TArticle Article { get; set; }
}
public class Paint : IReference<PaintType>
{
    public virtual Color Color { get; set; }
    public virtual PaintType Article { get; set; }
}