【发布时间】:2016-12-09 15:07:47
【问题描述】:
假设我们有以下界面:
public interface ILine<T>
{
T Item { get; set;}
}
我确实有课程 Line1 和 Line2 实现它
public class Item1
{
}
public class Item2
{
}
public class Line1 : ILine<Item1>
{
public Item1 Item {get; set;}
}
public class Line2 : ILine<Item2>
{
public Item2 Item { get; set; }
}
现在我有课了
public class Lines1
{
public Line1[] Items { get; set;}
}
我想创建一个界面
public interface ILines<T>
{
ILine<T>[] Items { get; set;}
}
让 Lines1 实现它Lines1 : ILines<Item1>(Lines2 对Item2 执行相同的操作)。但这是不可能的,因为编译器错误
“Lines1”没有实现接口成员“ILines.Items”。 'Lines1.Items' 不能实现 'ILines.Items' 因为它确实 没有匹配的返回类型“IEnumerable>”。
这些类是从 xml 反序列化的,所以我真的需要 Item1、Item2、Line1、Line2 等属性而不是接口。
我能做些什么来前进?或者我正在尝试应用一些著名的反模式?
更新:很好的解释,为什么不可能: covariance in c#
很遗憾在写问题之前我没有找到它。
【问题讨论】: