Static: Quando Usar?

Em algumas linguagens de programação, como C#, Java e C++, existem dois tipos de modificadores: os de acesso e os de não-acesso. Um modificador é uma palavra chave que denota um significado adicional na definição do código. Static é um modificador cujas características tornam o programa restrito a algumas situações. Você sabe quando usá-lo? Confira os trechos de código a seguir.

Em C#, um membro declarado como estático o torna pertencente ao próprio tipo (classe, por exemplo) ao invés de pertencer a um objeto específico.

O uso deste modificador promove ganho de performance no código, porém pode dificultar a manutenção, um motivo pelos quais os programas com static são considerados menos flexíveis.

É preciso saber como trabalhar sem referências de objetos.

Utilização

  • Classes
  • Atributos
  • Métodos
  • Propriedades
  • Construtores
  • Outros (eventos, operadores)

Onde não é usado:

  • Indexadores
  • Destrutores
  • Qualquer outro tipo que não seja “class”

Em geral, o modificador static pode ser usado com dados e funções que não precisam de uma instância de classe para ser acessada.

Classe Estática

  • Não pode ser instanciada;
  • Ela é sealed: não pode ser herdada;
  • Todos os atributos, métodos e construtores têm de ser estáticos.
static class Calculator
{
    //Em toda classe estática, os atributos têm de ser estáticos
    public static int n1;

    //Em toda classe estática, os métodos têm de ser estáticos
    public static int Calcular(int a, int b, char op)
    {
         if (op.Equals('+')) return a + b;
         if (op.Equals('-')) return a - b;
         if (op.Equals('*')) return a * b;
         if (op.Equals('/')) return a / b;
         
         return 0;
    }
}

Atributo estático

  • Não é possível um atributo estático ser referenciado por uma instância (via this): ele só pode ser referenciado pelo nome do tipo;
  • Um atributo estático não tem ligação com instância.
static int n1 = 0;

public void X() 
{
    //erro de compilação
    this.n1 = 1; 
}

Método Estático

  • São chamados a partir da classe, sem utilizar uma instância. Isso faz a chamada de método se tornar um pouco mais rápida;
  • Podem ter o modificador de acesso public ou private;
  • Assim como no último exemplo, métodos estáticos não podem fazer referência a atributos não estáticos.

Propriedade Estática

  • Similar a um método estático;
  • É acessada também pelo nome da classe;
  • Útil para encapsular dados globais no programa;
  • Obs: também não aceita o ponteiro this para referenciar atributos.
public static int FirstOperand
{
     get { return firstOperand; }
     set { firstOperand = value; }
}

Construtor Estático

  • Em uma classe estática, um construtor deve ser estático;
  • Sem parâmetros;
  • Sem modificador de acesso.
static Calculator()
{
    n1 = n2 = 0;
}

Um construtor comum cria instâncias de uma classe com o operador new. Como uma classe estática não pode ser instanciada, o construtor estático impõe que nenhuma instância daquela classe será criada.

Um construtor estático é usado para inicializar campos estáticos, mas é um pouco mais lento que um construtor comum. Isso não significa que essa leve queda de performance vai impactar em toda aplicação que você escrever.

Confira aqui  a solução completa no meu repositório.

PS: Esse artigo foi escrito com base na linguagem C#. Em outras linguagens que implementam esse modificador a interpretação pode ser um pouco diferente.

Um abraço e até a próxima!

Anúncios

2 Respostas para “Static: Quando Usar?

  1. Pingback: C# – Quando usar o modificador Static | Eu adoro programar·

  2. Pingback: Classes Utilitárias em Projetos de Software | Thiago Vidal·

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s