Inquiridor
Quando é recomendado usar o metodo 'static'

Discussão Geral
-
Todas as Respostas
-
Patric V,
Um membro estático não pode ser referenciado através de uma instância mas somente através do nome do tipo.
RESUMO:
- Não pode ser usada com indexadores;
- Pode ser usada em construtores;
- Por padrão é privada;
- Pode ser publica ou parametrizada;
- Se aplicada a uma classe todos os membros tem que ser estáticos também;
- Não pode ser acessado por uma instância;===================================================================
C# - Compreendendo as palavras chave const , readonly e static
http://www.macoratti.net/14/09/c_ctrdst.htm
===================================================================
C# - Conceitos básicos - Classes Estáticas
http://www.macoratti.net/12/01/c_stc1.htm
===================================================================
static (Referência de C#)
https://docs.microsoft.com/pt-br/dotnet/csharp/language-reference/keywords/static
===================================================================
Métodos e atributos estáticos
https://www.caelum.com.br/apostila-csharp-orientacao-objetos/metodos-e-atributos-estaticos/
===================================================================
Qual é o sentido de um atributo ser private e static ao mesmo tempo em uma classe?
https://pt.stackoverflow.com/questions/99603/qual-%C3%A9-o-sentido-de-um-atributo-ser-private-e-static-ao-mesmo-tempo-em-uma-class
===================================================================Fabio.
- Editado Fabio I quinta-feira, 24 de agosto de 2017 21:51
-
Quando o método não faz alteração no objeto, ou seja na instância do mesmo.
- Editado welington jrModerator sexta-feira, 25 de agosto de 2017 13:54
-
Patric, tudo o que o Fabio e o Welignton disseram.
Entenda o seguinte, toda classe pode definir métodos, variáveis ou propriedades estáticas. O "static" no C# é dito como "Shared" no VB; que exemplifica melhor - o método (ou variáveis/propriedades como eu disse) é "compartilhado" entre todas as instâncias do escopo (da mesma classe, classes derivadas etc - sendo "public" certamente).
O exemplo é totalmente válido:
public class Familiar { public string Sobrenome; public static bool Familia(Base Um, Base Outro) { return (Um.Sobrenome == Outro.Sobrenome); } public Familiar(string Sobrenome) { this.Sobrenome = Sobrenome; } } public class Pessoa : Familiar { public string Nome; public Pessoa(string Nome, string Sobrenome) : base(Sobrenome) { this.Nome = Nome; } } public class Estranho : Pessoa { public static new bool Familia(Base Um, Base Outro) { return false; } public Estranho (string Nome, string Sobrenome) : base(Nome, Sobrenome) { } } public static class Programa { public int Main(string[] args) { Pessoa Eu = new Pessoa("Eu", "Todos"); Pessoa Outro = new Pessoa("Ele", "Todos"); Estranho Nunca = new Pessoa("Qualquer", "Todos"); if (Familiar.Familia(Eu, Outro)) { //Vai ser verdadeiro! } if (Pessoa.Familia(Eu, Outro)) { //TAMBÉM Vai ser verdadeiro! } if (Pessoa.Familia(Nunca , Outro)) { //TAMBÉM Vai ser verdadeiro! //Está sendo chamado o MÉTODO de "Pessoa", apesar //Do argumento ser da classe "Estranho" } if (Estranho.Familia(Eu, Outro)) { //Esse NUNCA dará verdadeiro, porque o //Método chamado é da classe "Estranho", que //através do uso do "static new", define um //novo método - e retorna sempre "false" } return 0; } }
Espero que ajude
-
Os puristas da Orientaçao à Objeto vão dizer: NUNCA!
https://objcsharp.wordpress.com/2013/07/08/why-static-code-is-bad/
https://blog.goyello.com/2009/12/17/why-static-classes-are-evil/
https://dzone.com/articles/why-static-bad-and-how-avoid
https://simpleprogrammer.com/2010/01/29/static-methods-will-shock-you/
Basicamente voce usa Static quando voce nao quer instanciar uma classe. Classes Static sao autoinstanciadas.
Exemplo: Voce que usar um metodo para o Calculo do Digito Verificador do CPF.
Voce pode criar ela como static usar de forma instantanea ou criar ela dentro de uma classe CPF, intanciar essa classe em um objeto e depois invocar o metodo. Exemplo:
public static class CPF1 { public static int calculaDigito(string cpf) { int digito = 0; //calculo digito return digito; } } public class CPF2 { public string cpf { get; set; } public int calculaDigito() { int digito = 0; string cpf = this.cpf;//usa a propriedade //calculo digito return digito; } } class Test { void testCPF() { string cpf = "123.456.789"; //Estatico int digito1 = CPF1.calculaDigito(cpf); //Dinamico CPF2 cpf2 = new CPF2(); cpf2.cpf = cpf; int digito2 = cpf2.calculaDigito(); } }
Qual dos dois é melhor? Se voce for analisar pelo lado do consumo de memoria, entao o metodo dianmico é melhor... pelo lado da simplicidade de codigo o metodo estatico é melhor.
William John Adam Trindade
Analyste-programmeur
Sogi Informatique ltée
If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".- Editado William John Adam TrindadeModerator sexta-feira, 25 de agosto de 2017 15:14