none
Quando é recomendado usar o metodo 'static' RRS feed

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
    quinta-feira, 24 de agosto de 2017 21:48
  • Quando o método não faz alteração no objeto, ou seja na instância do mesmo.


    sexta-feira, 25 de agosto de 2017 13:54
    Moderador
  • 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

    sexta-feira, 25 de agosto de 2017 14:31
  • 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.

    Att


    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".


    sexta-feira, 25 de agosto de 2017 15:13
    Moderador