Sérgio T. Uetanabaro wrote:
> Fiz um teste com a passagem de uma classe como parâmetro e obtive um
> comportamento inesperado. O código resumido está abaixo:
>  
> type
>   TClasse = class
>   public
>     constructor Create;virtual;
>   end;
> 
>  
> procedure TForm1.Button1Click(Sender: TObject);
> begin
>   Cria(TClasse);
> end;
>  
> { TClasse }
>  
> constructor TClasse.Create;
> begin
>   ShowMessage('Create disparado!');
> end;
>  
> procedure TForm1.Cria(ClassRef:TClass);
> Var
>   Obj:TObject;
> begin
>   Obj := ClassRef.Create;
>   FreeAndNil(Obj);
> end;
> 
>  
> Na função CRIA, ao chamar o create da ClassRef, o create da TCLASSE não é
> disparado. O ShowMessage não acontece. Alguém sabe me explicar o pq?

Porque o construtor de TClass não é virtual.

Crie um tipo
   TClasseClass = class of TClasse;

e use esse tipo para passar o parâmetro. Faça um teste criando um 
decendente de TClasse e crie um constructor com override.

--
Joao Morais

Responder a