Duvida em criação de componentes
Boa tarde,
Alguém poderia me dizer a diferença em declarar o constructor assim:
e assim:
Me surgiu essa duvida depois que eu estava olhando os fontes de uns componentes e vi o constructor declarado dessas duas formas.
Obrigado.
Renato.
Alguém poderia me dizer a diferença em declarar o constructor assim:
constructor Create(aOwner:TComponent); reintroduce;
e assim:
constructor Create(aOwner:TComponent); override;
Me surgiu essa duvida depois que eu estava olhando os fontes de uns componentes e vi o constructor declarado dessas duas formas.
Obrigado.
Renato.
Renato.pavan
Curtidas 0
Respostas
Bruno Belchior
28/09/2006
Um método declarado como reintroduce, so será executado em um objeto da classe que o declarou, ele não entra no escopo de polimorfismo. Uma vez que ele disse que não quer herdar o que já foi implementado (embora isso seja possível mesmo com reintrodução de código) ´reintroduzindo´ tudo do zero...
GOSTEI 0
Marco Salles
28/09/2006
Mais algumas considerações:
A directiva overload pode ser usada para qualquer tipo de metodo , seja estatico,dinamido ou Virtual
A directiva reintroduce so pode ser usada se o metodo da classe ancestral tiver marcado como virtual
Alem de permitir a ssinaturas diferentes a directiva overload não oculta as implementaçoes do metodo nos ancestrais , estando assim , diponivel mais uma implementação simultaneamente
A directiva reintoduce [b:c109518f21]oculta[/b:c109518f21] o metodo na classe ancestral
Em outra palavras
A directiva overload pode ser usada para qualquer tipo de metodo , seja estatico,dinamido ou Virtual
A directiva reintroduce so pode ser usada se o metodo da classe ancestral tiver marcado como virtual
Alem de permitir a ssinaturas diferentes a directiva overload não oculta as implementaçoes do metodo nos ancestrais , estando assim , diponivel mais uma implementação simultaneamente
A directiva reintoduce [b:c109518f21]oculta[/b:c109518f21] o metodo na classe ancestral
Em outra palavras
TPai = class
metodo Virtual;
end;
Tfilho1 = class(Tpai)
metodo(parametros); overload;
end;
Tfilho2 = class(Tpai)
metodo(parametros);reintroduce;
end;
var
umObjetoFilho1:Tfilho1;
UmObjetoFilho2:Tfilho2;
begin
umObjetoFilho1:=TFilho1.Create;
umObjetoFilho2:=Tfilho2.create;
umObjetoFilho1.metodo; //metodo executado é o do pai
umObjetoFilho1.metodo(parametros); //metodo executado é o do filho1
umObjetoFilho2.metodo(parametros);//metoto executado é o do filho2
umObjetoFilho2.metodo; //não compila ... Esta oculto
umObjetoFilho1.Free;
umObjetoFilho2.Free;
GOSTEI 0
Renato.pavan
28/09/2006
Valeu pessoal, obrigado pelos esclarecimentos.
Renato
Renato
GOSTEI 0