簡體   English   中英

接口的通用實現

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM