Métodos e atributos estáticos

Em C#, métodos e atributos estáticos são recursos fundamentais para organizar e compartilhar dados ou comportamentos que pertencem à classe como um todo, e não a uma instância específica.

O que são membros estáticos?

  • Atributos estáticos: Variáveis associadas à classe, não ao objeto. Seu valor é compartilhado por todas as instâncias.
  • Métodos estáticos: Funções que podem ser chamadas sem criar um objeto da classe. Não podem aceder a membros de instância diretamente.

Como declarar membros estáticos

Use a palavra-chave static antes do tipo do membro:

public class Calculadora
{
public static int Contador = 0; // atributo estático

public static int Somar(int a, int b) // método estático
{
Contador++;
return a + b;
}
}

Como aceder a membros estáticos

Acesse diretamente pelo nome da classe, sem criar um objeto:

int resultado = Calculadora.Somar(3, 5);
Console.WriteLine(Calculadora.Contador); // Saída: 1

Não é necessário (nem permitido) fazer:

// Errado:
Calculadora calc = new Calculadora();
int resultado = calc.Somar(3, 5);

Exemplo prático: Contador de instâncias

public class Conta
{
public static int TotalContas = 0; // atributo estático

public Conta()
{
TotalContas++;
}
}

// Uso:
Conta c1 = new Conta();
Conta c2 = new Conta();
Console.WriteLine(Conta.TotalContas); // Saída: 2

O atributo estático TotalContas é incrementado a cada nova instância criada, mas pertence à classe, não ao objeto individual.

Classes estáticas

  • Uma classe estática só pode conter membros estáticos.
  • Não pode ser instanciada nem herdada.
  • Útil para utilitários e funções auxiliares.
public static class Util
{
public static void MostrarMensagem(string msg)
{
Console.WriteLine(msg);
}
}

// Uso:
Util.MostrarMensagem("Olá!");

Regras e limitações

  • Métodos estáticos não podem aceder a membros de instância (não podem usar this).
  • Podem ser sobrecarregados, mas não podem ser sobrescritos (não são polimórficos).
  • Atributos estáticos são inicializados antes do primeiro acesso à classe.
  • Variáveis locais dentro de métodos não podem ser estáticas.

Quando usar membros estáticos?

  • Quando um dado ou comportamento deve ser compartilhado entre todas as instâncias.
  • Para funções utilitárias ou helpers.
  • Para implementar contadores, caches, ou configurações globais.