Objetos Estáticos – Static Objects – C#

Objetos estáticos são objetos que possuem apenas uma instância e são definidos quando utilizamos a palavra-chave static.

 

Quando declaramos um objeto como estático, significa que não importa quantos deles sejam criados, existirá apenas uma cópia dele na memória. Ou seja, existe apenas uma instância do objeto.

 

Estes objetos estáticos podem ser desde classes inteiras a membros de uma classe (variáveis, por exemplo).

 

Classes Estáticas – Static Class

 

Uma classe estática é basicamente igual a uma classe não-estática. Porém uma classe estática não pode ser instanciada. Isto quer dizer que não podemos utilizar a palavra-chave new para criá-la.

 

Por este motivo, você pode acessar os membros de uma classe estática apenas usando o nome da classe.

 

Por exemplo, vamos supor que criamos uma classe chamada Utilitarios. E ela possui um método público chamado CalculaAlgo. Você pode chamar este método assim:

 

Utilitarios.CalculaAlgo();

 

Mas pra que serve isso? Pra que vou usar uma classe estática?

 

Podemos utilizar uma classe estática como um repositório de métodos que manipulam apenas parâmetros de entrada e não precisa ler (get) ou escrever (set) nenhum campo interno.

 

Como exemplo podemos usar a própria Biblioteca de Classes do .NET Framework (Class Library .NET Framework). Nela temos a classe estática System.Math, que possui várias operações matemáticas. Veja alguns exemplos que utilização desta classe:

 

double dub = -3.14; 
Console.WriteLine(Math.Abs(dub)); 
Console.WriteLine(Math.Floor(dub)); 
Console.WriteLine(Math.Round(Math.Abs(dub)));

 

Quando executamos este trecho de código temos:

 

3.14
-4
3



 

As principais características de uma classe estática:

 

  • Possui apenas membros estáticos;
  • Não pode ser instanciado.
  • É selado.
  • Não pode possuir construtores.

 

Membros estáticos de uma classe C# (Static Members)

 

As variáveis estáticas são usadas para definir constantes porque seus valores podem ser recuperados invocando a classe sem criar uma instância. As variáveis estáticas podem ser inicializadas fora da função do membro ou da definição da classe. Você também pode inicializar variáveis estáticas dentro da definição da classe.

 

Veja o exemplo a seguir:

 

using System;

namespace ExVariavelEstatica
{
   class VariavelEstatica
   {
      public static int numero;

      public void contagem()
      {
         numero++;
      }

      public int getNumero()
      {
         return numero;
      }
   }

   class TesteEstatico
   {
      static void Main(string[] args)
      {
         VariavelEstatica s1 = new VariavelEstatica ();
         VariavelEstatica s2 = new VariavelEstatica ();
         s1.contagem();
         s1.contagem();
         s1.contagem();
         s2.contagem();
         s2.contagem();
         s2.contagem();

         Console.WriteLine("Variavel numero para s1: {0}", s1.getNumero());
         Console.WriteLine("Variavel numero para s2: {0}", s2.getNumero());
         Console.ReadKey();
      }
   }
}

 

O resultado deste código pode ser visto abaixo:

 

Variavel numero para s1: 6
Variavel numero para s2: 6

 

Podemos também declarar um membro como estático. Tais funções podem acessar apenas variáveis estáticas. As funções estáticas existem mesmo antes de o objeto ser criado. Veja no exemplo a seguir:

 

using System;

namespace ExVariavelEstatica
{
   class VariavelEstatica
   {
      public static int numero;

      public void contagem()
      {
         numero++;
      }

      public static int getNumero()
      {
         return numero;
      }
   }

   class TesteEstatico
   {
      static void Main(string[] args)
      {
         VariavelEstatica s = new VariavelEstatica();
         s.contagem();
         s.contagem();
         s.contagem();

         Console.WriteLine("Variavel numero: {0}", VariavelEstatica.getNumero());
         Console.ReadKey();
      }
   }
}

 

O resultado é o seguinte:

 

Variavel numero: 3

 

Palavras finais – Objetos Estáticos

 

Classes estáticas não podem ser instanciadas usando a palavra chave new.

 

Itens estáticos podem apenas acessar outros itens estáticos. Por exemplo, uma classe estática só pode conter membros estáticos (variáveis, métodos, etc.). Um método estático só pode conter variáveis estáticas e só pode acessar outros itens estáticos.

 

Os itens estáticos compartilham os recursos entre vários usuários.

 

Static não pode ser usado com indexadores, destrutores ou tipos que não sejam classes.

 

Um construtor estático em uma classe não-estática é executado apenas uma vez quando a classe é instanciada pela primeira vez.

 

Um construtor estático em uma classe estática é executado apenas uma vez que qualquer um dos seus membros estáticos acessados pela primeira vez.

 

Os membros estáticos são alocados na área do heap de alta freqüência da memória.

 

Se cadastre no Grupo VIP App Dev para ser avisado quando os próximos artigos da série forem publicados.

Comece pelo e-book GRATUITO

5 Passos Para Ser Um App Dev

Se você não sabe por onde começar, este e-book te mostra os passos para ser um desenvolvedor de aplicativos de sucesso.
100% livre de spam.

Para enviar seu comentário, preencha os campos abaixo:

Deixe uma resposta

*

Seja o primeiro a comentar!