我有以下代碼段,我試圖實現一個返回列表的方法。我的結構如下:抽象類「座標」 - >公共類「YCoordinate」與我的界面指向「YCoordinate」。我不希望我的接口直接與我的抽象類聊天,因爲我覺得我的抽象類的實現負責工作。在C中使用抽象類,接口和列表#
接口:
interface IYCoordinate
{
System.Collections.Generic.List<Coordinates> GetYCoordinateList();
}
抽象類:
public abstract class Coordinates
{
private int coordinatePriority;
private int coordinate;
public Coordinates(int CoordinatePriority, int Coordinate)
{
this.CoordinatePriority = CoordinatePriority;
this.Coordinate = Coordinate;
}
public Coordinates() { }
public int CoordinatePriority { get { return coordinatePriority; } set { coordinatePriority = value; } }
public int Coordinate { get { return coordinate; } set { coordinate = value; } }
public virtual List<Coordinates> GetYCoordinateList()
{
throw new System.NotImplementedException();
}
}
接口和抽象類的實現(這是打破部分):
public class YCoordinate : Coordinates, IYCoordinate
{
public override List<Coordinates> GetYCoordinateList()
{
List<Coordinates> _list = new List<Coordinates>();
_list.Add(new IYCoordinate(1, 5000));
_list.Add(new IYCoordinate(2, 100000));
return _list;
}
}
不過,我想返回座標列表並在「YCoord」中卡住公共覆蓋功能inate「類,因爲我無法直接實例化座標類(因爲它的摘要)。我怎樣才能返回座標列表?如果我如上所示放入IYCoordinate,則會發生同樣的錯誤。
也許我的實現是完全錯誤的?任何建議如果做得更好,都會受到歡迎。
稍後會有XCoordinate類等。如果這種方法看起來有點像它,那是因爲我試圖理解背後的理論。
'IYCoordinate.GetYCoordinateList()'應該返回'的IList','沒有列出'。 –
cdhowie
2013-04-29 19:22:45
@cdhowie編譯器不需要將接口作爲接口中定義的方法的返回結果返回。出於設計和體系結構的原因,您可能會選擇這樣做,但是,由OP編寫的接口定義在這裏不是問題。 IMO YCoordinate班有缺陷,因爲它擁有自己的列表。這將會更好地歸於另一個班級。 OP的例子有點令人困惑。 – CodeMonkeyKing 2013-04-29 20:35:09
@CodeMonkeyKing我從來沒有說過,編譯器會抱怨。我的意見旨在灌輸良好的設計實踐,而不是指出錯誤。 – cdhowie 2013-04-29 21:37:22