www.devmedia.com.br [versão para impressão]Quick Tips: Métodos e variáveis estáticas
Nesta quick tip veremos como funcionam e como métodos e variáveis estáticas.
Quando declaramos um método ou uma variável em uma classe, por default, o mesmo será acessado a partir do objeto, ou seja, para utilizarmos este método ou variável teremos que instanciar um objeto desta classe.
Métodos e variáveis estáticas são elementos que pertencem à classe e não ao objeto, dessa forma quando os declaramos temos que usá-los a partir da classe.
No Delphi para declararmos métodos e variáveis estáticas precisamos incluir a palavra reservada class na frente dos mesmos.
unit Unit2;
interface
type
TCliente = Class
private
class var Bairro:String;
public
var
class function GetBairro:String;
class procedure SetBairro(Value:String);
End;
implementation
{ TCliente }
class function TCliente.GetBairro: String;
begin
result := Bairro;
end;
class procedure TCliente.SetBairro(Value: String);
begin
bairro := Value;
end;
end.
No exemplo àcima temos a variável Nome que é do objeto e a variável Bairro que é da classe(note a declaração da mesma, class var). Além disso temos os métodos Get e Set de bairro também como sendo da classe.
Para usarmos estes métodos e variáveis faríamos da seguinte maneira:

procedure TForm1.Button1Click(Sender: TObject);
begin
//Click do botão Cria Cliente 1
C1 := TCliente.Create;
C1.Nome := 'Ricardo';
TCliente.SetBairro('Realengo');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
//Click do botão Cria Cliente 2
C2 := TCliente.Create;
C2.Nome := 'Ricardo';
TCliente.SetBairro('Barra');
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
//Click do botão Exibir Valores
ShowMessage('C1 ' +#13+
'Nome:' + C1.Nome + #13 +
'Bairro:' + TCliente.getBairro + #13 +
'C2 ' +#13+
'Nome:' + C2.Nome + #13 +
'Bairro:' + TCliente.getBairro);
end;
Como podemos ver no nosso exemplo, temos 2 botões para criar dois clientes diferentes e um terceiro para exibir os valores de cada um deles. Note que para passamos o valor para a variável Nome, usamos o objeto(C1.Nome e C2.Nome), porém para usar os métodos estáticos que manipulam a variável Bairro usamos diretamente a classe(TCliente.Bairro).
Vale ressaltar algo muito importante, quando definimos uma variável estática em uma classe, esta só terá um valor independentemente da quantidade de objetos que tenhamos desta classe, no exemplo acima se clicarmos no botão “Criar Cliente

Por isso devemos ter cuidado ao definir variáveis estáticas pois acabam sendo globais para toda a aplicação, visto que a definição da classe dentro de nossa aplicação é uma só.
Outro ponto importante ressaltar é que um método estático só pode acessar variáveis estáticas da classe e um método do objeto só pode acessar variáveis do objeto, ou seja, se no nosso exemplo, na implementação do método SetBairro tentássemos manipular o valor de Nome, obteríamos um erro de compilação.
É isso aí pessoal, espero que tenham gostado.
Fiquem a vontade para criticar, tirar dúvidas e sugerir novos temas.
Abraço.
Ricardo Coelho
www.devmedia.com.br/articles/viewcomp.asp?comp=15513