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,需要虚拟化。