【发布时间】:2012-03-16 11:13:05
【问题描述】:
您好,我正在用 C# 创建一个几何库...
我有一个抽象类形状。 我已经定义了一个类向量(也代表 (x,y) 点)。
我想使用各种几何对象、曲线、直线、圆弧、路径等
为此,我定义了一个抽象 Segment 类并派生了许多类,例如LineSegment(见下文)、CurveSegment、ArcCircleSegment、BezierCurveSegment、HalfInfiniteLine 等
我还定义了一个类Path(不是抽象的),它旨在表示连接在一起的多个段(就像您可能从绘图应用程序中得到的一样)。在此,我包括了 Segments 的 List 成员 (List<Segment>)。
然后我希望从Path 派生类,关键示例是LinePath,它应该只包含LineSegments。我遇到的问题是我希望能够在LinePath 对象上调用get 属性,假设它将返回LineSegment。如果不每次都显式转换,这可能吗?
我想避免使 Path 抽象,因为我可能有多个 Segment 类型的路径。
public class LineSegment : Segment
{
private vector m_start;
private vector m_end;
private vector m_vector;
public vector Start
{
get { return m_start; }
set { m_start = value; }
}
public vector End
{
get { return m_end; }
set { m_end = value; }
}
public vector Vec
{
get { return m_vector; }
set { m_vector = value; }
}
public double Length()
{
return Vec.length();
}
public LineSegment(vector v0, vector v1):base()
{
this.Start.x = v0.x;
this.Start.y = v0.y;
this.End.x = v1.x;
this.End.y = v1.y;
this.Vec = this.End - this.Start;
}
}
【问题讨论】:
-
作为一个想法,而不是将
Path重载到LinePath,您是否可以使用Path<T>,然后根据需要创建Path<Segment>或Path<LineSegment>。我并没有认真考虑这是否会奏效,但似乎它可能会奏效。 :)
标签: c# oop abstract-class