Static
Com base nos seguintes artigos:
http://www.eggheadcafe.com/articles/20020206.asp
http://msdn.microsoft.com/en-us/library/98f28cdx.aspx
Compreendi o funcionamento de um método estático e pude perceber claramente a diferença entre um método estático um método acessado através da instância da classe.
Porém, apesar de inúmeras buscas não encontrei em nenhum momento uma explicação que mostra QUANDO É UMA BOA PRÁTICA utilizar um método estático ou não.
Uns dizem, se você não precisa da instância de um método não tem porque não usá-lo como estático.
Outro, ressaltam com muita frequência o perigo dos métodos estáticos.
O fato é que não é apenas quando se necessita de um "contador", para manter valores que se usam os métodos estáticos. Vi diversos exemplos que é comum se criar um método estátic para "validar um CPF" por exemplo, sendo que não acumula/mantém valores. Então porque o uso do método estático ?
O conceito do método estático fica claro nos artigos acima, mas a aplicabilidade dos mesmos parecem nem sempre seguirem o verdadeiro propósito.
Como ainda não tenho uma vivência com o tipo "static", estou um pouco confuso entre: O certo, A boa prática, O seguro, o Recomendado e por fim A Realidade do uso deste tipo de método.
Obrigado.
Rubens Cury
Curtidas 0
Respostas
Luiz Maia
17/01/2010
Olá Rubens, blz?
O uso das classes estáticas são totalmente dependentes de aplicação para aplicação.
Isto depende muito do intuito de seus metodos. Por tanto não tem uma boa prática para isto.
Pode dar uma olhada em DesginPatterns.
Uma classe estática é basicamente a mesma que uma classe não-estática, mas há uma diferença: uma classe estática não pode ser instanciada. Em outras palavras, você não pode usar a Palavra-chave new para criar uma variável do tipo da classe. Como não há nenhuma variável de instância, você acessa os membros de uma classe estática usando o nome de classe propriamente dito. Por exemplo, se você tiver uma classe estática denominada UtilityClass contendo um método público chamado MethodA, você chama o método conforme o exemplo seguinte:
C#
Copiar Código
UtilityClass.MethodA();
Tal como acontece com todos os tipos de classe, as informações do tipo para uma classe estática são carregadas pelo .NET Framework common language runtime (CLR) quando o programa que referencia a classe é carregado. O programa não pode especificar exatamente quando a classe é carregada. No entanto, ele é garantido a serem carregados e ter seus campos inicializados e seu construtor estático chamado antes que a classe é referenciada pela Primeiro vez no seu programa. Um construtor estático é chamado somente uma vez e uma classe estática permanece na memória durante o tempo de vida do domínio de aplicativo no qual o programa reside.
A Estático classe pode ser usado como um contêiner conveniente para conjuntos de métodos que operam em parâmetros de entrada e não precisará obter ou definir os campos de instância interno apenas. Por exemplo, no .NET Framework Biblioteca de Classes, a classe estático System..::.Math contém vários métodos que executam operações matemáticas, sem nenhuma necessidade de armazenar ou recuperar dados que é exclusivos para uma instância específica da classe Math.
Fonte: http://msdn.microsoft.com/pt-br/library/79b3xss3.aspx
Talvez, o mais interessante seria:
A lista a seguir fornece os principais recursos de um Estático classe:
Contém apenas membros estáticos.
Não é possível criar uma instância.
É sealed.
Não pode conter construtores de instância.
Criando uma classe estática é, portanto, basicamente o mesmo que criar uma classe que contém apenas membros estáticos e um construtor particular. Um construtor particular impede que a classe seja instanciada. A vantagem de usar um Estático classe é que o compilador pode Marcar para garantir que nenhum membro de instância acidentalmente é adicionado. O compilador garante que as instâncias dessa classe não podem ser criadas.
Estático classes são lacradas e, portanto, não podem ser herdadas. Eles não podem herdar qualquer classe exceto Object. Classes Estático não podem conter um construtor de instância; no entanto, elas podem conter um construtor estático. Classes de não-estático também devem definir um construtor estático se a classe contiver membros estáticos que exigem a inicialização não trivial.
Eu, particularmente, faço uso de classes estáticas quando crio uma classe que contem metodos uteis e muito utilizados ao longo de meu projeto. Metodos por exemplo de conversão de valores, de replace, contadores e etc...
Abraços
Att
Luiz Maia
GOSTEI 0
Rubens Cury
17/01/2010
Olá Luiz,
Consegui consolidar melhor o conceito e necessidade de uso dos métodos estáticos diante da sua explicação.
Muito obrigado,
Rubens Cury
GOSTEI 0
Luiz Maia
17/01/2010
Que bom Rubens,
Precisando de qualquer coisa, não exite em nos contactar, ok?
Abraços e sucesos em seu projeto.
Att
Luiz Maia
GOSTEI 0