【发布时间】:2013-04-29 19:20:54
【问题描述】:
我有以下代码部分,我正在尝试实现一个返回列表的方法。我的结构如下:抽象类“坐标”->公共类“YCoordinate”,我的接口指向“YCoordinate”。我不希望我的界面直接与我的抽象类聊天,因为我觉得我的抽象类的实现负责工作。
界面:
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;
}
}
但是,我试图返回坐标列表并卡在“YCoordinate”类中的公共覆盖函数上,因为我无法直接实例化坐标类(因为它是抽象的)。如何返回坐标列表?如果我如上所示输入 IYCoordinate,也会发生同样的错误。
也许我的实现完全错误?任何做得更好的建议都将受到欢迎。
稍后会有 XCoordinate 类等等。如果这种方法看起来有点过分,那是因为我试图掌握这背后的理论。
【问题讨论】:
-
IYCoordinate.GetYCoordinateList()应该返回IList<Coordinates>,而不是List<Coordinates>。 -
@cdhowie 编译器不要求将接口作为接口中定义的方法的返回结果返回。出于设计和体系结构的原因,您可以选择这样做,但是,由 OP 编写的接口定义不是这里的问题。 IMO YCoordinate 类的缺陷在于它拥有自己的列表。这将更好地由另一个班级拥有。 OP 的示例有点令人困惑。
-
@CodeMonkeyKing 我从来没有说过编译器会抱怨。我的评论旨在灌输良好的设计实践,而不是指出错误。
-
@cdhowie 这似乎是一条诫命,而不是设计“最佳实践”。这不是必需品。贴出的代码问题远比改成IList接口更深。
-
@CodeMonkeyKing 这些问题实际上是无关的,这就是为什么我发表评论而不是答案。