Возможно ли и надо ли делать дочерним класс, принимающий в качестве аргументов объекты дочерних от классов аргументов родительского класса классов?
Есть пять классов:
namespace Pokuland
{
public class Point //Первый класс
{
public int X;
public int Y;
public Point(int x, int y)
{
X = (x < 0) ? 0 : x;
Y = (y < 0) ? 0 : y;
}
public static Point[] operator +(Point start, Point end)
{
int[] vector = end - start;
int length = Math.Max(Math.Abs(vector[0]), Math.Abs(vector[1]));
Point[] points = new Point[length + 1];
for (int i = 0; i <= length; i++)
{
points[i] = new Point(
start.X + (int)((double)vector[0] / length * i),
start.Y + (int)((double)vector[1] / length * i)
);
}
return points;
}
//...
}
}
namespace Pokuland
{
public class Dungeon
{
//...
public class Level
{
//...
public class Point : Pokuland.Point //Второй
{
public Level Parent;
public Point(int x, int y, Level parent) : base(x, y)
{
Parent = parent;
}
//...
}
public class Node : Point //Третий
{
public Path[] Pathes;
public Node(int y, int x, Level parent) : base(x, y, parent)
{
Pathes = new Path[8];
}
//...
public class Path //Четвёртый
{
public readonly Node Start;
public readonly Node End;
public Point[] Points;
public Path(Node start, int y, int x, int n)
{
Points = start + new Node(y, x, Start.Parent);
Start.Parent.Nodes.Add(End);
End.Pathes[n] = this;
}
}
}
}
}
}
namespace Pokuland
{
public class Path //Пятый
{
public Point Start => Points[0];
public Point End => Points[Points.Length - 1];
public Point[] Points;
public Path(Point start, int x, int y)
{
Points = start + new Point(x, y);
}
}
}
Point - координаты точки и набор функций для работы с ними, Dungeon.Level.Point - клетка подземелья, хранит не только координаты, но и указатель на этаж данжа, на котором расположена, Dungeon.Level.Node - перекрёсток, клетка, подземелья, от которой строятся коридоры, дополнительно хранит массив 8 возможных направлений, хранящих null или Dungeon.Level.Node.Path - коридор подземелья, выходящий в этом направлении, хранящий список всех клеток коридора (Dungeon.Level.Point) и ссылки на ноды, которые коридор связывает. А Path - хранит просто последовательность точек и будет использоваться, например, для поиска пути.
Я хотел бы переписать Dungeon.Level.Node.Path, как дочерний класс Path, но чтобы он принимал Dungeon.Level.Node в качестве аргументов, а точки пути хранил в Dungeon.Level.Point. Как это можно реализовать, и надо ли?