Могу ли я во время выполнения приложения определить, существует ли класс с именем Tlog?
Используйте в модуле TLog RegisterClass( TLog ) или потомка TLog, затем FindClass( "TLog" ) или FindClass( "TLogSubclass" ) для получения ссылки на класс в вызывающем модуле, позволяя тем самым пользоваться объектами данного класса. Вы также могли бы добавить классовый метод, возвращающий существующий экземпляр или NIL, или который создает и возвращает новый экземпляр при отсутствии текущего.
Самое необходимое, что нужно сделать, это создать абстрактный, чисто виртуальный базовый класс TLog, и TLogSubclass, реально наполненный функциональным назначением. Вызывающему оператору необходимо знать всего лишь о TLog, а не о TLogSubclass, чтобы получить доступ к его методам и свойствам.
Тем не менее, я считаю не лучшим решением технологию поиска класса по его имени. Вот что предлагаю я:
unit LogUnit;
interfacetype
TLog = classpublicconstructor Create;
procedure LogMessage(constMessage: string); virtual; abstract;
end;
var
Log: TLog;
implementationconstructor TLog.Create;
begin
Log := Self;
end;
procedure TidyUp; far;
begin
Log.Free;
end;
initialization
AddExitProc(TidyUp);
end.
unit LogImpl;
interfaceimplementationuses Log;
type
TLogImplementation = class(TLog)
publicprocedure LogMessage(constMessage: string); override;
end;
procedure TLogImplementation.LogMessage(constMessage: string);
begin{ записываем сообщение в журнальный файл }end;
initialization
TLogImplementation.Create;
end.
Обратите внимание на то, что здесь используются "скрытые" данные - класс
TLogImplementation объявлен внутри секции реализации модуля LogImpl, поэтому
никакой другой модуль их не видит. Фактически, интерфейсная часть полностью
пустая! Вы можете протестировать это, изучив Log и увидев NIL в самом начале.
Кроме того, вы могли бы иметь ничего не делающий TLog.LogMessage. Затем вы
могли бы создать экземпляр TLog в секции инициализации модуля LogUnit.pas, и
освобождать его перед созданием экземпляра TLogImplementation в LogImpl.pas.
Таким образом, для подключения к приложению класса, нужно просто добавить к
проекту модуль LogImpl.
Если Вас заинтересовала или понравилась информация по разработке на Delph - "Поиск класса", Вы можете поставить закладку в социальной сети или в своём блоге на данную страницу: Так же Вы можете задать вопрос по работе этого модуля или примера через форму обратной связи, в сообщение обязательно указывайте название или ссылку на статью!