Arhlit - информационные технологии

Базовый класс, содержащий общий экземпляр, созданный в производном классе?

Я пытаюсь выяснить, возможно ли это.

У меня есть класс BaseGameEntity, из которого я в настоящее время получаю NormalDrop и OtherDrop, каждый из которых имеет экземпляр StateMachine‹ T >, где T — это NormalDrop и OtherDrop соответственно.

Отсюда можно назвать соответствующие состояния, которые относятся к этим видам капель.

Что я хочу сделать, так это добавить еще один слой, класс Drop, производный от BaseGameEntity, от которого затем происходят другие формы drop.

Внутри Drop мне нужен StateMachine‹ T >, где «T» становится NormalDrop или OtherDrop в зависимости от того, что использует его в качестве базового класса.

Это на самом деле возможно?

02.07.2012

Ответы:


1

Да, вы можете использовать странно повторяющийся шаблон шаблона:

public class Drop<T> where T : Drop<T> { ... }
public class NormalDrop : Drop<NormalDrop> { ... }
public class OtherDrop : Drop<OtherDrop> { ... }

Тогда внутри базового класса Drop T всегда будет NormalDrop или OtherDrop.

Этот шаблон обычно не считается удобным для разработчиков, так как на первый взгляд он сбивает с толку, и, вероятно, существуют лучшие способы структурирования кода (хотя, возможно, не всегда). Эрик Липперт написал очень хорошую статью в блоге об этом шаблоне и некоторых его недостатках здесь.

02.07.2012
  • Фантастическое название шаблона и фантастический и быстрый ответ, большое спасибо! 03.07.2012
  • @JoshuaMee Спасибо, с удовольствием. Добро пожаловать в СО! 03.07.2012
  • Новые материалы

    12 сайтов с искусственным интеллектом, которые поразят вас
    Приготовьтесь поразить воображение Сегодня существует несколько веб-сайтов, использующих искусственный интеллект (ИИ). От индивидуальных рекомендаций по новостям до более умных поисковых..

    Скрытый технический долг в системах машинного обучения [NeurIPS 2015]
    Что такое технический долг? Технический долг — это метафора, введенная Уордом Каннингемом в 1992 году, чтобы объяснить долгосрочные затраты, связанные с быстрым продвижением в разработке..

    Алгоритм быстрой сортировки в Python
    Всем привет, добро пожаловать на programminginpython.com . Здесь я покажу вам, как реализовать алгоритм быстрой сортировки в Python. В предыдущих статьях я рассмотрел Сортировку вставкой ,..

    Как использовать манипулирование объектами в JavaScript
    Объекты являются важным строительным блоком JavaScript. Они позволяют группировать свойства и методы вместе. Объект представляет собой набор свойств. Свойства идентифицируются с..

    Разработка игр с помощью Godot Engine: мощный инструмент с открытым исходным кодом
    Разработка игр — творческий и сложный процесс, требующий множества навыков и инструментов. Одним из наиболее важных инструментов является игровой движок, который представляет собой программную..

    От XML к аннотациям: переход к современной конфигурации Spring
    Введение Фреймворк Spring претерпел значительную эволюцию с момента своего создания. Одним из заметных изменений стал переход от конфигураций на основе XML к конфигурациям, управляемым..

    Я люблю Руби!
    Я люблю Руби! Мне это нравится по той же причине, по которой мне нравится программировать на Python. Он настолько интуитивно понятен, а встроенные методы упрощают решение проблем. Если вы..