Найти всех помощников классов в Delphi во время выполнения, используя RTTI?

Предлагает ли расширенный RTTI в Delphi 2010 способ перечисления определенных помощников по классам и записям во время выполнения?

Насколько я знаю, Delphi не показывает подсказку или предупреждение, когда для класса определено более одного помощника класса, определение помощника класса может быть полезной процедурой в "обеспечении качества".

PS Конечно, я знаю, что никогда не должен использовать сторонние компоненты или библиотеки без исходного кода, что облегчило бы поиск помощников по классу.

1 ответ

Решение

Поскольку помощники класса применяются только к классу на основе того, что помощник является "ближайшим" по объему, класс просто не может знать, что помощник существует. Например, вы можете создать помощника класса в вашем модуле, чтобы "помочь" классу из другого модуля, для которого у вас нет источника. Класс в другом подразделении понятия не имеет о каких-либо помощниках. Если бы оно имело это знание, то его пришлось бы перекомпилировать, чтобы учесть это... что приводит к следующей проблеме;

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

Помощники класса - соблазнительные язычники. Они обещают славу и удачу, но слишком часто они обрушиваются на смерть и разрушение... еще долго после того, как ты отдаешься их хитрым уловкам.

По этой причине их введение в язык решило очень специфические проблемы, а именно способность "появиться" для введения функциональности в существующую структуру. Пока вы придерживаетесь правила "только один помощник" и не отклоняетесь от этого пути, вы можете оказаться относительно невредимыми. Независимо от этого, вам понадобится объединенная кишечная стойкость Беовульфа, Леонидаса (из Спарты) и Фродо Бэггинса, чтобы перемещаться по этим водам.

Учитывая это, здесь, в команде RAD Studio, мы не хотим использовать вспомогательный класс, где его можно избежать. И когда мы их используем, соответствующая фаланга формируется еще до того, как мы начинаем...

Здесь будут драконы...

Другие вопросы по тегам