Recent

Author Topic: Problema instanciar objeto de uma variável TClass, construtor não é chamado  (Read 422 times)

Tebo Software

  • New Member
  • *
  • Posts: 31
Bom dia pessoal

estou com um problema em relação a chamar um construtor de uma variável do tipo TClass, não é executado o construtor padrão da classe que foi passada:

Code: Pascal  [Select][+][-]
  1. type
  2.  
  3.   ITeste = interface
  4.     ['{6F797283-07D1-4BD8-8D9D-7F1B05023857}']
  5.     procedure executar;
  6.   end;
  7.  
  8.   { TTeste }
  9.  
  10.   TTeste = class(TInterfacedObject, ITeste)
  11.   private
  12.     FMensagem : String;
  13.   public
  14.     constructor Create; overload;
  15.     constructor Create(aMensagem : String); reintroduce; overload;
  16.     procedure executar;
  17.   end;

No caso onde ou chamar tem uma varíavel do tipo TClass e eu tentei chamar FClassType.Create e não é chamado o construtor.

Alguém sabe como resolver isso, ou se eu consigo através de RTTI obter o método construtor?

Tebo Software

  • New Member
  • *
  • Posts: 31
Bom dia

Para deixar registrado o problema:

A class TObject tem um construtor não virtual e com isso quando é chamado a variável do tipo TClass o método Create é chamado do TObject.

Para contornar, eu peguei e criei uma classe com o construtor virtual e os meus objetos estão herdando dela e também criei um tipo TClass para essa minha classe:

Code: Pascal  [Select][+][-]
  1. unit uDefaultClass;
  2.  
  3. {$mode ObjFPC}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils;
  9.  
  10. type
  11.  
  12.   { TDefaultClass }
  13.  
  14.   TDefaultClass = class(TInterfacedPersistent, IUnknown)
  15.   public
  16.     constructor Create; virtual;
  17.   end;
  18.  
  19.   TDefaultClassType = class of TDefaultClass;
  20.  
  21. implementation
  22.  
  23. { TDefaultClass }
  24.  
  25. constructor TDefaultClass.Create;
  26. begin
  27.  
  28. end;
  29.  
  30. end.
  31.  

 

TinyPortal © 2005-2018