Возможно ли и надо ли делать дочерним класс, принимающий в качестве аргументов объекты дочерних от классов аргументов родительского класса классов?

Есть пять классов:

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. Как это можно реализовать, и надо ли?


Ответы (0 шт):