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