Существует ли способ инстанцировать класса его именем в Дельфи?

Я думаю, что вы должны сначала определить, какой тип шифрования использует Codeigniter в поле пароля, а затем вам необходимо расшифровать или подтвердить пароль на Laravel. У меня была обратная проблема, и на codeigniter мне пришлось использовать библиотеку ('encrypt') для проверки хэша, который использует Laravel.

11
задан Ricardo Acras 31 March 2009 в 14:04
поделиться

2 ответа

Это от справки Delphi (Delphi 2006, но также и доступно, по крайней мере, от Delphi 7):

Функция синтаксиса GetClass (константа AClassName: строка): TPersistentClass;

Вызов описания GetClass для получения класса из имени класса. Этот класс может привыкнуть в качестве параметра к стандартным программам, которые требуют класса. Класс должен быть зарегистрирован, прежде чем GetClass может найти его. Классы формы и классы компонента, на которые ссылаются в объявлении формы (переменные экземпляра), автоматически регистрируются, когда форма загружается. Другие классы могут быть зарегистрированы путем вызова RegisterClass или RegisterClasses.

Здесь некоторый пример кода. Работы как таковые только потому, что TButton является TControl и поэтому преобразованием типа, допустимы.

procedure TForm1.FormCreate(Sender: TObject);
begin
  RegisterClasses([TButton, TForm]);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  CRef : TPersistentClass;
  AControl : TControl;
begin
  CRef := GetClass('TButton');
  if CRef<>nil then
  begin
     AControl := TControl(TControlClass(CRef).Create(Self));
     with AControl do
     begin
        Parent := Self;
        Width := 50;
        Height := 30;
     end;
  end;
end;
29
ответ дан 3 December 2019 в 02:41
поделиться

Когда мне нужно было это сделать, я построил свою собственную фабрику объектов, которая использует специальный подкласс TStringList, В настоящее время я использую Delphi 7, поэтому класс списка строк поддерживает только присоединение объекта к строке, затем я получил подкласс TStringList, чтобы также можно было обрабатывать типы классов, поэтому теперь я могу создать экземпляр объекта, просто передав его имя класса в завод. Работает следующим образом:

1-й - Загрузка фабрики одиночных объектов;
2-й - Зарегистрируйте любой объект на фабрике, может быть в секции инициализации устройства;

Основные методы Factory могут быть: isClassRegistered, registerClass, instantiateClass (ClassName: STring): TObject;

Таким образом, я могу создать экземпляр любой объект, или использовать предыдущий экземпляр объекта, или даже их подмножество.

Я предпочитаю использовать перечисляемый тип вместо строки для идентификации класса.

Примечания: Это очень, очень краткий пример, полностью функциональный код более сложен, но, поверьте, не слишком.

2
ответ дан 3 December 2019 в 02:41
поделиться
Другие вопросы по тегам:

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