C # Создание класса, который конструируется из унаследованного класса - PullRequest
2 голосов
/ 25 апреля 2011

У меня есть класс:

class Cube
{
   public string Name;
   public string TexturePath;
}

И еще один класс, который наследует Cube

class DrawableCube : Cube
{
   public Texture2D Texture;
   public Shader Shader;
}

Предположим, у меня есть коллекция Cube, которую я хочу превратить в DrawableCube. Без создания конструктора, который принимает Cube в качестве параметра и копирует все атрибуты, как я могу сделать копию Cube с результирующим типом DrawableCube?

Ответы [ 4 ]

6 голосов
/ 25 апреля 2011

ИМХО, лучшее решение здесь - вообще не наследовать DrawableCube от Cube, а позволить классу пользовательского интерфейса DrawableCube хранить внутреннюю ссылку на класс данных Cube. Однако Cube, вероятно, следует проектировать как неизменный класс . Таким образом, DrawableCube потребуется конструктор, принимающий Cube, но вам не нужно копировать все его атрибуты, вы можете просто сохранить указанную ссылку:

class DrawableCube : 
{
   private myCube;

   public DrawableCube(Cube c)
   {
       myCube=c;
   } 
}
1 голос
/ 25 апреля 2011

Если вы хотите превратить коллекции Cube в коллекции DrawableCube, то, возможно, наследование не является правильным инструментом.

Попробуйте объединение:

class DrawableCube //: Cube
{
   public Cube TheCube { get; private set; }
   public DrawableCube (Cube c) { TheCube = c; }
   public Texture2D Texture;
   public Shader Shader;
}
1 голос
/ 25 апреля 2011

Предупреждение: следующее решение некрасиво, но оно делает то, что вы хотите.

Заставьте Cube принять один параметр типа CubeInformation в своем конструкторе, и это его единственный член (он является закрытым). Он просто устанавливает CubeInformation. Затем он предоставляет свойства для материала в этой структуре.

Пусть CubeInformation будет структурой, которая содержит данные для Cube.

Пусть DrawableCube имеет конструктор, который принимает Cube и копирует структуру CubeInformation из Cube.

Wallah. Если кому-то нужно добавить дополнительные данные в Cube, они добавляют его в структуру CubeInformation и реализуют свойства в Cube. В DrawableCube.

обслуживание не требуется.
0 голосов
/ 25 апреля 2011

Поскольку вам не нужен конструктор, я думаю, что единственная другая опция - это фабричный шаблон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...