另一个接口的接口实现覆盖类型
本文关键字:接口 类型 覆盖 另一个 实现 | 更新日期: 2023-09-27 18:06:35
我有一个接口IArticle
,有几个实现:ProductType
, RawMaterial
, PaintType
等
然后我有一个引用(SKU),它是一个介于IArticle
和Color
之间的复合元素:
public interface IReference
{
Color Color { get; set; }
IArticle Article { get; set; }
}
然后我有几个实现,每个都有一个相应的IArticle实现:
-
Product : IReference
将有ProductType
作为Article
, -
Paint : IReference
将有PaintType
作为Article
SemifinishedGood: IReference
将有RawMaterial
作为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; }
}