Могу ли я во время выполнения приложения определить, существует ли класс с именем Tlog? Используйте в модуле TLog RegisterClass( TLog ) или потомка TLog, затем FindClass( 'TLog' ) или FindClass( 'TLogSubclass' ) для получения ссылки на класс в вызывающем модуле, позволяя тем самым пользоваться объектами данного класса. Вы также могли бы добавить классовый метод, возвращающий существующий экземпляр или NIL, или который создает и возвращает новый экземпляр при отсутствии текущего.
Самое необходимое, что нужно сделать, это создать абстрактный, чисто виртуальный базовый класс TLog, и TLogSubclass, реально наполненный функциональным назначением. Вызывающему оператору необходимо знать всего лишь о TLog, а не о TLogSubclass, чтобы получить доступ к его методам и свойствам.
Тем не менее, я считаю не лучшим решением технологию поиска класса по его имени. Вот что предлагаю я:
unit LogUnit ;
interface
type TLog = class public constructor Create ; procedure LogMessage( const Message : string ) ; virtual ; abstract ; end ; var Log : TLog ;