Найти всех Помощников Класса в Delphi во времени выполнения с помощью RTTI?

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

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

p.s., конечно, я знаю, что никогда не должен использовать сторонние компоненты или библиотеки без исходного кода, который помог бы grep помощникам класса.

5
задан mjn 10 February 2010 в 19:36
поделиться

1 ответ

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

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

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

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

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

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

9
ответ дан 14 December 2019 в 01:07
поделиться
Другие вопросы по тегам:

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