我试图以如下方式模拟问题:
我有点卡住了 - 现在(如下)我无法阻止 IProductsWithConfig 添加/包含在 ProductWithConfig.Config 中。任何想法如何以优雅的方式对其进行编码?
interface ISchedule
{
IEnumerable<IProduct> Products { get; set; }
}
interface IProductWithConfig : IProduct
{
IEnumerable<IProduct> Config { get; set; }
}
interface IProduct
{
int Id { get; set; }
}
答案 0 :(得分:1)
继承的想法是您可以在需要 IProduct 的任何情况下使用 IProduct 的任何派生版本。实现 IProductWithConfig 的类的每个实例都是通过定义实现 IProduct 的实例。 Fildor 的评论是有道理的:使 IProduct 抽象并从中创建一个新的后代。
或者您可以隐藏公共属性 Config 并通过一些方法(例如 Add(Product) 和只读 IEnumerable)公开这些属性。然后你可以控制将什么样的对象添加到集合中。