@marsep

Как можно определить несколько классов с одним родителем в рамках одного типа?

Всем привет! Возник вопрос в Unity3d по классам... Необходимо реализовать такую систему: имеется родительский класс, который содержит методы и переменные и есть дочерние классы, которые наследуют этот класс. Некоторые дочерние классы могут переопределять методы и т.п., с этим и так понятно. Нужно, чтобы можно сгруппировать игровые объекты, схожие по своему типу в одно целое, т.е. родительский класс формирует стандартное поведение объекта данного типа, а дочерние представляют уже определенный объект и дополняют его поведение в случае необходимости. Стоит задача, например, при столкновении игрока с таким объектом правильно использовать его класс. Получить компонент по имени можно, с этим нет проблем, но проблема возникает, когда нужно кэшировать компоненты, ведь по сути классы могут быть разные и лишь родитель тот же.

d783c088a40d4e3db892d2a5e8199831.png

Т.е. при столкновении с объектом или при старте мне нужно кэшировать компоненты классов в массив, только я не могу задать нужный тип для массива, т.е. класс можно сказать неизвестен. Я пробовал использовать тип object вместо прямого определения типа, но тут возникает ошибки, если я пытаюсь обратится к методам, которые неизвестны для него, например, метод execute будет неизвестен, т.к. тип object не определяет это. С этим понятно, но как можно такое максимально просто сделать? Ведь задача я думаю актуально не только в моей примере. Искал достаточно долго в интернете, находил зацепки в рамках MethodInfo, но также говорили, что это влияет сильно на производительность, да и показалось мне это слишком затратным решением, можно просить Вас советов?
  • Вопрос задан
  • 539 просмотров
Решения вопроса 1
DmitryITWorksMakarov
@DmitryITWorksMakarov
Эм.....а почему нельзя кэшировать в "массив" типа ParentClass?
Для каждого объекта кэша будут известны все его методы, а реализацию (или уточнение реализации) их берут на себя потомки.
Я насколько понимаю ООП, наследование и полиморфизм для того придумано....
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Neuroware
@Neuroware
Программист в свободное от работы время
хранить в типе objectах, а по нему смотреть какого он типа .GetType().ToString() и приводить к этому типу var A= (ЯтиПтИпа)object; далее делать с ним все что душе угодно. Но такое решение не идеал, масштабируется плохо.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы