Entendendo Métodos de Classe

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (2)  (0)

Entenda nesse artigo, como funcionam os métodos de classes no Delphi.

 

Em Delphi, um método é uma procedure ou function que executa uma operação em um objeto. Um método de classe é um método que opera em uma referência de classe em vez de uma referência de objeto.

Se você leu nas entrelinhas, deduzirá que métodos de classe são acessíveis mesmo quando não criamos uma instância da classe (o objeto).

Classes versus Métodos. Métodos de Objetos

Toda vez que você cria dinamicamente um componente Delphi, usa um método de classe: o Constructor. O constructor Create é um método de classe, que diferentemente de praticamente todos os demais métodos encontrados em programação Delphi, são métodos de objeto. Um método de classe é um método da classe, e bastante apropriadamente, um método de objeto é um método que pode ser chamado por uma instância da classe.

Isto é mais bem ilustrado por um exemplo, com classes e objetos realçados em vermelho para maior clareza,:

 

myCheckbox := TCheckbox.Create(nil);

 

Aqui, a chamada a Create foi precedida pelo nome da classe e um ponto ("TCheckbox".). É um método da classe, geralmente conhecido como um constructor. Este é o mecanismo pelo qual são criadas instâncias de uma classe. O resultado é uma instância da classe TCheckbox. Estas instâncias são chamadas objetos. Compare a linha de código prévia com a seguinte:

 

myCheckbox.Repaint;

 

Aqui, é chamado o método Repaint do objeto TCheckbox (herdado de TWinControl). A chamada para Repaint é precedida pela variável objeto e um ponto ("myCheckbox".).

Métodos de Classe podem ser chamados sem uma instância da classe (por exemplo, "TCheckbox.Create"). Podem também ser chamados diretamente a partir de um objeto (por exemplo, "myCheckbox.ClassName"). Porém métodos de objeto só podem ser chamados por uma instância de uma classe (por exemplo, "myCheckbox.Repaint").

Por trás dos bastidores, o Create constructor está alocando memória para o objeto (e executando qualquer inicialização adicional, tal como especificado por TCheckbox ou suas classes ancestrais).

Experimentando com nossos próprios métodos de classe

Pense em um AboutBox (um formulário "Sobre Esta Aplicação" personalizado). Em meu código, estou usando algo como:

 

procedure TfrMain.mnuInfoClick(Sender: TObject) ;

begin

  AboutBox:=TAboutBox.Create(nil) ;

  try

   AboutBox.ShowModal;

  finally

   AboutBox.Release;

  end;

end;

 

Este, evidentemente, é um modo muito agradável de fazer o trabalho, mas apenas para tornar o código mais fácil de ler (e administrar), seria muito mais eficiente mudar isto para:

 

procedure TfrMain.mnuInfoClick(Sender: TObject) ;

begin

  TAboutBox.ShowYourself;

end;

 

A linha acima, chama o método de classe "ShowYourself" da classe TAboutBox. O "ShowYouself" deve ser marcado com a palavra chave "class":

 

class procedure TAboutBox.ShowYourself;

begin

   AboutBox:= TAboutBox.Create(nil) ;

   try

    AboutBox.ShowModal;

   finally

    AboutBox.Release;

   end;

end;

 

Observações:

·         A definição de um método de classe tem que incluir a palavra reservada class, antes da palavra chave procedure ou function.

·         O formulário AboutBox não é auto-criado (Project-options).

·         Coloque a unit AboutBox na cláusula uses do formulário principal.

·         Não esqueça de declarar o procedure na interface (public) da unit AboutBox.

 

E quanto a propriedades de classe? Embora o Delphi (Win32) permita criar métodos (funções ou procedures) de classes (statics), não podemos marcar uma propriedade de uma classe para ser uma propriedade (static) de classe. False. Podemos sim! Veja como simular propriedades de classe que usam typed constants.

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?