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

C# 接口实现覆盖另一个接口的类型,c#,C#,我有一个界面IArticle,有几个实现:ProductType,RawMaterial,PaintType,等等 那么,我有一个我认为的引用(SKU),它是 iTe> 和颜色< /代码>之间的复合元素: public interface IReference { Color Color { get; set; } IArticle Article { get; set; } } 然后我有几个实现,每个实现都有一个对应的IArticle实现: 产品:i参考将有一个产品类型作为

我有一个界面
IArticle
,有几个实现:
ProductType
RawMaterial
PaintType
,等等

那么,我有一个我认为的引用(SKU),它是<代码> iTe> <代码>和<代码>颜色< /代码>之间的复合元素:

public interface IReference
{
    Color Color { get; set; }
    IArticle Article { get; set; }
}
然后我有几个实现,每个实现都有一个对应的IArticle实现:

  • 产品:i参考
    将有一个
    产品类型
    作为
    文章
  • 半成品:i参考
    将有一个
    原材料
    作为
    文章
  • Paint:i参考
    将有一个
    PaintType
    作为
    文章
所以问题是。。。如何覆盖
文章
类型,如下所示:

public class Paint: IReference
{
    public virtual Color Color { get; set; }
    public virtual PaintType Article { get; set; }
}
这样我就可以访问
PaintType
特定属性,而不是在处理
Paint.Article
时只做
IArticle
,而不必每次都强制转换?这种架构有什么问题?

很容易解决这个问题

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; }
}
公共接口i引用,其中TArticle:i节
{
颜色颜色{get;set;}
TArticle项目{get;set;}
}
公共类绘画:i参考
{
公共虚拟颜色{get;set;}
公共虚拟PaintType项目{get;set;}
}

比我快1秒!您还应该演示如何声明
绘制
类型。我认为没有必要重复答案。干得好,在那里;我把它们结合起来:)杰米克——这就是OP的要求。它可能是EF类;他们可能希望将其虚拟化以供嘲弄。它们可能就像虚拟类一样。对于NHibernateSo来说,它是公共虚拟的,为什么要在您的
Paint
实现上使用
public virtual
?似乎没有太多的理由这么做。@Jamiec这是为了NHibernate,需要虚拟化。