[英]Generic implementation of interface
為什么這不起作用?
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。 為什么不允許這種實現?
問候,凱特
作為對您的評論的回答,有關如何兼顧兩方面的問題; 我在想這樣的事情,您可以在其中明確實現接口GetPoints屬性,創建“類型更多”的GetPoints屬性,以及可以在具體實現中覆蓋的受保護抽象方法。
這2個屬性稱為抽象實現。
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();
}
PointList類應實現IPointList接口。 方法/屬性不能僅因返回類型而異,這就是您要對PointList類中的Points聲明進行的操作。 如果實施
List<TPointType> Points { get; }
那么從邏輯上講你不能實現
List<IPoint> Points { get; }
因為它們只會因返回類型而不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.