Найти всех помощников классов в Delphi во время выполнения, используя RTTI?
Предлагает ли расширенный RTTI в Delphi 2010 способ перечисления определенных помощников по классам и записям во время выполнения?
Насколько я знаю, Delphi не показывает подсказку или предупреждение, когда для класса определено более одного помощника класса, определение помощника класса может быть полезной процедурой в "обеспечении качества".
PS Конечно, я знаю, что никогда не должен использовать сторонние компоненты или библиотеки без исходного кода, что облегчило бы поиск помощников по классу.
1 ответ
Поскольку помощники класса применяются только к классу на основе того, что помощник является "ближайшим" по объему, класс просто не может знать, что помощник существует. Например, вы можете создать помощника класса в вашем модуле, чтобы "помочь" классу из другого модуля, для которого у вас нет источника. Класс в другом подразделении понятия не имеет о каких-либо помощниках. Если бы оно имело это знание, то его пришлось бы перекомпилировать, чтобы учесть это... что приводит к следующей проблеме;
Учтите это: у вас может быть класс, объявленный в одном общем модуле, который используется многими другими модулями в вашем приложении. В каждом из этих модулей вы объявляете нового помощника для этого общего класса с различными методами и "вспомогательными" функциями. Поскольку каждый юнит не знает ничего о других юнитах, которые также объявляют своего собственного помощника, по замыслу нет способа каким-то образом объединить всех помощников. Теперь учтите, что этот общий модуль теперь живет за пределами предварительно скомпилированного пакета.
Помощники класса - соблазнительные язычники. Они обещают славу и удачу, но слишком часто они обрушиваются на смерть и разрушение... еще долго после того, как ты отдаешься их хитрым уловкам.
По этой причине их введение в язык решило очень специфические проблемы, а именно способность "появиться" для введения функциональности в существующую структуру. Пока вы придерживаетесь правила "только один помощник" и не отклоняетесь от этого пути, вы можете оказаться относительно невредимыми. Независимо от этого, вам понадобится объединенная кишечная стойкость Беовульфа, Леонидаса (из Спарты) и Фродо Бэггинса, чтобы перемещаться по этим водам.
Учитывая это, здесь, в команде RAD Studio, мы не хотим использовать вспомогательный класс, где его можно избежать. И когда мы их используем, соответствующая фаланга формируется еще до того, как мы начинаем...
Здесь будут драконы...