07 – Métodos, classes e atributos estáticos


Neste post aqui, gostaria de falar sobre Enum, mas vai ficar mais para frente. Vou falar sobre métodos estáticos hoje.

fonte: https://mastigado.wordpress.com

Pelo que sei, método ou classe estática são aqueles que em tempo de compilação do programa, já ficam lá com espaço reservado na memória sem que você precise instanciar um objeto. Aliás, para acessar um método estático(static method) é necessário apenas digitar o NomeDaClasse.NomeDoMétodo, simples assim.

Experimente acessar um método estático depois de ter instanciando um objeto para ver o que acontece, o Visual Studio nem irá sugerí-lo para você quando digitar o “.” após ter escrito o nome da classe.

Quando um método é estático, ele não necessariamente precisa pertencer a uma classe estática, pois você pode instanciar esta classe não-estática e quando tiver acesso ao objeto desta instância, terá acesso a todos os métodos não-estáticos dela.  Mas, sobre classes estáticas, se você declara sua classe como estática, todos os seus métodos deverão ser estáticos.

Sobre atributos(variáveis de classe) estáticos o raciocínio é o mesmo, compilou-se o programa, já tem o lugarzinho dele reservado na memória sem que tenha de existir uma instância do objeto de sua classe para poder acessá-la.

Neste exemplo abaixo, o método static só servirá para caso seja necessário tornar um método estático acessível em uma instância de um objeto. Neste caso, o método static Vendas() só terá seu valor alterado quando a classe for instanciada porque há um método chamado public Vendas() que irá sobrepor o valor da variável DescontoPadrao para 30M.


namespace ConsoleApplication
{
    class Vendas
    {
       private static decimal DescontoPadrao = 0.5M;

       static Vendas()
       {
           DescontoPadrao = 20M;
       }

       public Vendas()
       {
           DescontoPadrao = 30M;
       }

       public static decimal ObterTaxaDeDesconto(int tipoDeCliente)
       {
          if (tipoDeCliente == 10M)
          {
              return 10M;
          }
          return DescontoPadrao;
       }
}
}

Do jeito que está nesta classe acima, a variável declarada como static já vem com o valor de 0,5M(valor decimal), mas pelo fato de existir um construtor chamado static Vendas(), que declara que dentro dele o DescontoPadrao é de 20M, quando você for acessá-la como no código abaixo, o seu valor estará com 20M porque mesmo você não instanciando uma nova classe, o fato de você ter declarado um construtor do tipo static nela, te dá poder de modificar um atributo static.


namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            var desconto = Vendas.ObterTaxaDeDesconto(1);
        }
    }
}

Já no código abaixo, há uma variável declarada chamada venda que instancia um novo objeto do tipo Vendas e que retorna o valor 30M porque o fato deste objeto ter sido instanciado e o método ObterTaxaDeDesconto ter sido invocado a partir deste objeto, faz com que o construtor static Vendas() não seja executado porque ele é um método estático, que por sua vez não é instanciado junto com o objeto. Por conta disso, será executado o método public Vendas() que escreve o valor de 30M na variável DescontoPadrao, que é um atributo de classe, é estático, mas que carrega apenas um valor inicial e que pode ser alterado por um método.


namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            var venda = new Vendas();
            var desconto = Vendas.ObterTaxaDeDesconto(1);
        }
    }
}

Putz, mastigado.

fonte: https://mastigado.wordpress.com

Sobre Mastigado
Sou um daqueles que precisa mudar o mundo.

Deixe uma resposta

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

%d blogueiros gostam disto: