为什么这不起作用?
public interface IPoint
{
// not important
}
public interface IPointList
{
List<IPoint> Points { get; }
}
public abstract class Point : IPoint
{
// implemented IPoint
}
public abstract class PointList<TPointType> : IPointList
where TPointType: IPoint
{
public abstract List<TPointType> Points { get; } // <- doesn't compile
}
TPointType显然必须是一个IPoint。为什么不允许这种实现?
的问候, 凯特
答案 0 :(得分:3)
作为对你的评论的回答,关于如何充分利用两个世界;
我正在考虑这样的事情,你在那里实现你的接口GetPoints属性,创建一个'更多类型'的GetPoints属性,以及一个可以在具体实现中覆盖的受保护抽象方法。
这两个属性调用抽象实现。
public abstract class PointList<T> : IPointList where T : IPoint
{
public IList<T> GetPoints
{
get
{
return GetPointsCore ();
}
}
IList<IPoint> IPointList.GetPoints
{
get
{
return GetPointsCore () as IList<IPoint>;
}
}
protected abstract IList<T> GetPointsCore();
}
答案 1 :(得分:2)
类PointList 应该实现IPointList接口。方法/属性只能通过返回类型而有所不同,这是您尝试使用PointList类中的Points声明进行的操作。如果你实施
List<TPointType> Points { get; }
然后逻辑上你无法实现
List<IPoint> Points { get; }
因为它们仅因返回类型而不同。