static (Referência de C#)

Use o static modificador para declarar um membro estático, que pertence ao tipo de si mesmo, em vez de um objeto específico. O static modificador pode ser usado com classes, campos, métodos, propriedades, operadores, eventos e construtores, mas ele não pode ser usado com tipos diferentes de classes, destruidores ou indexadores. Para obter mais informações, consulte Classes static e membros de classes static (Guia de Programação em C#).

Exemplo

A seguinte classe é declarada como static e contém somente static métodos:

    static class CompanyEmployee
    {
        public static void DoSomething() { /*...*/ }
        public static void DoSomethingElse() { /*...*/  }
    }

Uma declaração de constante ou tipo é implicitamente um membro estático.

Um membro static não pode ser referenciado por uma instância. Em vez disso, ele é referido através o nome do tipo. Por exemplo, considere a seguinte classe:

    public class MyBaseC
    {
        public struct MyStruct
        {
            public static int x = 100;
        }
    }

Para referir-se ao membro estático x, use o nome totalmente qualificado, MyBaseC.MyStruct.x, a menos que o membro é acessível a partir do mesmo escopo:

Console.WriteLine(MyBaseC.MyStruct.x);

Enquanto uma instância de uma classe contém uma cópia separada de todos os campos da instância da classe, existe apenas uma cópia de cada campo estático.

Não é possível usar Este para fazer referência a métodos estáticos ou os assessores da propriedade.

Se a static palavra-chave é aplicado a uma classe, todos os membros da classe devem ser estáticos.

Classes e classes estáticas podem ter construtores estáticos. Construtores estáticos são chamados em algum ponto entre o início do programa e quando a classe é instanciada.

Dica

O static palavra-chave mais limitou usos que em C++.Para comparar com a palavra-chave do C++, consulte Estático (C++).

Para demonstrar estáticos membros, considere uma classe que represente um funcionário da empresa. Suponha que a classe contém um método para funcionários de contagem e um campo para armazenar o número de funcionários. O método e o campo não pertencem a qualquer funcionário da instância. Em vez deles pertence à classe da empresa. Portanto, eles devem ser declarados como membros de classe estáticos.

Este exemplo lê o nome e identificação de um novo funcionário, incrementa o contador do funcionário por um e exibe as informações para o novo funcionário e o novo número de funcionários. Para simplificar, este programa lê o número atual de funcionários por meio do teclado. Em um aplicativo real, essas informações devem ser ler de um arquivo.

    public class Employee4
{
    public string id;
    public string name;

    public Employee4()
    {
    }

    public Employee4(string name, string id)
    {
        this.name = name;
        this.id = id;
    }

    public static int employeeCounter;

    public static int AddEmployee()
    {
        return ++employeeCounter;
    }
}

class MainClass : Employee4
{
    static void Main()
    {
        Console.Write("Enter the employee's name: ");
        string name = Console.ReadLine();
        Console.Write("Enter the employee's ID: ");
        string id = Console.ReadLine();

        // Create and configure the employee object:
        Employee4 e = new Employee4(name, id);
        Console.Write("Enter the current number of employees: ");
        string n = Console.ReadLine();
        Employee4.employeeCounter = Int32.Parse(n);
        Employee4.AddEmployee();

        // Display the new information:
        Console.WriteLine("Name: {0}", e.name);
        Console.WriteLine("ID:   {0}", e.id);
        Console.WriteLine("New Number of Employees: {0}",
                      Employee4.employeeCounter);
    }
}
    /*
    Input:
    Matthias Berndt
    AF643G
    15
    Sample Output:
    Enter the employee's name: Matthias Berndt
    Enter the employee's ID: AF643G
    Enter the current number of employees: 15
    Name: Matthias Berndt
    ID:   AF643G
    New Number of Employees: 16
    */

Este exemplo mostra que embora você possa inicializar um campo estático usando outro campo estático que ainda não foi declarado, os resultados serão indefinidos até que você atribuir explicitamente um valor para o campo estático.

class Test
{
   static int x = y;
   static int y = 5;

   static void Main()
   {
      Console.WriteLine(Test.x);
      Console.WriteLine(Test.y);

      Test.x = 99;
      Console.WriteLine(Test.x);
   }
}
/*
Output:
    0
    5
    99
*/

Especificação da linguagem C#

Para obter mais informações, consulte a Especificação da linguagem C#. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso de C#.

Consulte também

Referência

Palavras-chave C#

Modificadores (Referência de C#)

Classes static e membros de classes static (Guia de Programação em C#)

Conceitos

Guia de Programação em C#

Outros recursos

Referência de C#