c# - 接口(interface)实现覆盖另一个接口(interface)的类型

标签 c#

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

然后我有一个我认为是 IArticle 之间的复合元素的引用 (SKU)和一个 Color :

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 时不必每次都投?这种架构有什么问题?

最佳答案

Generic type parameters很容易解决这个问题。

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

关于c# - 接口(interface)实现覆盖另一个接口(interface)的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39450826/

相关文章:

c# - ASP.Net 核心 MVC FromQuery DateTime in utc

c# - 有没有比为 MVVM 使用静态类或单例更好的方法?

c# - 如何在 C#.NET 中提供应用程序路径?

c# - URL 的上次修改日期

c# - 在 C# 中使用 GitLabCI

c# - 将逐个元素添加到 ListView 而不阻塞 UI

c# - Win form DataGridView 动态添加按钮列

c# - 适用于 C# ASP.NET 开发人员的 SharePoint

c# - Sql 批量复制是如何工作的?

c# - 从字符串转换为 system.drawing.point c#