none
Classes/Metodos Static RRS feed

  • Pergunta

  • Pessoal,

    Qdo devo usar classes/metodos static ?

    Isso vai muito alem do apenas (VOCE NAO PRECISA INSTANCIAR PRA USAR).
    Entao qdo devo escolher qdo uso normal ou estatico ?

    sexta-feira, 3 de janeiro de 2014 15:46

Todas as Respostas

  • Olá AGA!
    Tudo bem? Quanto tempo! :)

    Um método deve ser estático quando vc tiver um método que não depende de nenhum outro método de instância, ou atributo, ou propriedade de instância. Isto é, quando o método depende apenas dele próprio e de nenhum outro recurso de instância para ser executado.

    Classes estáticas devem ser usadas somente quando todos os métodos por ela contidos forem estáticos. Classes estáticas, por serem estáticas, não devem possuir estado, ao contrário das classes de instância. Quando de pensa em "classes de instância" já se espera que a classe possua um estado que caracterize aquele momento da instância em memória.


    Mas por que criar um método ou classe estática???? Pois favorece a sua execução diante do CLR, pois assim ele não precia verificar se:
    - O método a ser executado é de instância e sua instância está ativa;
    - Se o método a ser executado foi sobrescrito por alguma instância que herda da classe base onde o método estático está localizado;
    - Se o método a ser executado depende de recursos de instância que podem estar empilhados em um conjunto de heranças, e assim sobrescritos por outras classes;

    Sempre que um método estático de uma classe estática é executado, o CLR não precisa fazer uma série de validações, assim se tem um ganho.
    Mas não pense que "este ganho é muito grande, e assim farei todos os meus métodos e classes estáticos, pois assim meu sistema será muito rápido!". Esse pensamento é errado, pois se fizéssemos tudo desta forma perderíamos o poder da orientação a objetos e voltaríamos a escrever código procedural/procedimental.

    Classes e métodos estáticos são balas de prata, use com coerência.

    []s!


    MSc. Fernando Henrique Inocêncio Borba Ferreira
    Microsoft MVP - Visual C#
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    • Sugerido como Resposta Raphael Heitor sexta-feira, 3 de janeiro de 2014 17:02
    sexta-feira, 3 de janeiro de 2014 16:07
    Moderador
  • Complementando um pouco o que o Fernando disse:

    Primeiramente ótima explicação.

    Você perguntou quando deve usar certo?!

    A minha opnião (até meio extremista) é que nunca deve ser usado. Mas tenho meus motivos, cito alguns.

    - Método estático e Singleton vicia. Você começa a usar (sente uma facilidade "não preciso instanciar!!") e não para. (mas as consequências são pesadas de utilizar muito métodos/classes estáticas;

    - Você, como o Fernando bem citou, perde o poder que a OO te dá;

    - Raramente você consegue se controlar ao usar estático (ou seja, vai ter método estático seu manipulando estado.);

    - e muitos outros.

    Tente trabalhar sempre com OO e patterns que te auxiliam nessa jornada. (DDD, TDD é fundamental tbm).

    sexta-feira, 3 de janeiro de 2014 17:01