Привет! Я создаю библиотеку геометрии в C # ...
У меня есть форма абстрактного класса.Я определил вектор класса (также представляющий (x, y) точки).
Я хотел бы использовать различные геометрические объекты, кривые, линии, дуги, пути и т. Д.
.это я определил абстрактный класс Segment
и вывел ряд классов, например LineSegment
(см. ниже), CurveSegment
, ArcCircleSegment
, BezierCurveSegment
, HalfInfiniteLine
и т. д.
IМы также определили класс Path
(НЕ абстрактный), который предназначен для представления нескольких сегментов, соединенных вместе (например, что вы можете получить из приложения для рисования).В это я включаю член List сегментов (List<Segment>
).
Затем я хочу получить классы из Path
, ключевым примером является LinePath
, который должен содержать только LineSegments
.У меня проблема в том, что я хотел бы иметь возможность вызывать свойство get для LinePath
объекта, предполагая, что он вернет LineSegment
.Возможно ли это без явного приведения каждый раз?
Я хочу не делать абстрактным Path
, поскольку у меня может быть путь нескольких типов сегментов.
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;
}
}