GARANTIR DESCONTO

Fórum Type = Procedure - O que é isso? #405155

18/07/2011

0

Quando eu faço assim: TNotifyValidate   = procedure (Documento: TDocumentoNovo) of object; O que eu estou declarando e qual a finalidade disso e como eu uso isso?
Pjava

Pjava

Responder

Posts

18/07/2011

Marco Salles

È o recurso muito interressante do Delphi , conhecido como Ponteiros de Métodos ...

Vejamos

Type
TNotifyValidate   = procedure (Documento: TDocumentoNovo) of object;



Imagine uma classe

TClassA = TClass
procedure FazerAlgo(Documento: TDocumentoNovo) ;  // Tipo procedimental
...
end;

Agora definimos um Class B

TClassB = TClass
onFazerAlgo: TNotifyValidate;  // DEFINIÇÂO DE UMA VARIAVEL DO TIPO TNotifyValidate
....
end;

ps) A VAriavel definida anteriomente pode receber que valores ????  .. Pode receber Ponteiros de metodos que
contenham a mesma assinatura que o Type TNotifyValidate .

Os objetos da ClassB não tem nada haver com os objetos da ClassA , porém podemos atribuir a variavel
onFazerAlgo um método de um objeto da ClassA , pois esses esses métodos são compativeis em sua
assinatura

Veja a utilização

var
ObjClassA:TClassA;
ObjClassB:TClassB;
Documento: TDocumentoNovo;
begin
ObjClassB:=TObjClassb.create;
ObjClassB.OnFazerAlgo:=ObjClassA.FazerAlgo;  // Atribuição do método
ObjClassB.OnFazerAlgo(Documento); //Excecução do Método
ObjClassB.free;
end;


Note que não definimos o método na TClassB , porém exceutamos o método FazerAlgo Definido na TClassA


Este é um exemplo sem pouco valor , na prática é muito utilizado na delegação internamente no Delphi

Vc tem  um Botão e seu evento Onclik .. No Form vc tem o método  procedure Button1Click(Sender: TObject);
O que nos bastidores o Delphi Faz é :

Button1.onclick := self.Button1Click ;   // Atribuição do método

quando vc executa

Button1(sender) ; //Excecução do Método  ..o método chamado é o método definido no Formulario








Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar