static (referência C#) 

Use o static modificador para declarar um membro estático, que pertence ao próprio tipo em vez de um objeto específico. The static modificador pode ser usado com classes, campos, métodos, propriedades, operadores, eventos e construtores, mas não pode ser usado com os indexadores, destruidores ou tipos diferentes de classes. Para obter mais informações, consulte Classes estáticas e membros de classe estáticos (guia de programação C#).

Exemplo

A seguinte classe é declarada sistema autônomo static e contém apenas 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 para o membro x estático, utilize o nome totalmente qualificado (a menos que seja acessível a partir do mesmo escopo):

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 Isso para fazer referência a métodos estático ou os acessadores da propriedade.

Se o static palavra-chave é aplicada a uma classe, todos os membros da classe devem ser estático.

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

Observação:

O static palavra-chave mais limitou usos que em C++. Para comparar com a palavra-chave 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 a ID de um novo funcionário, incrementa o contador de funcionário em um e exibe as informações para o novo funcionário e o 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 ainda não foi declarado, os resultados serão não definidos até que você atribui 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 as seções a seguir no Especificação da linguagem C#:

  • 1.6.6.3 Métodos estático e instância

  • 5.1.1 Variáveis estático

  • 10.3.7 Membros estático e instância

  • 10.5.1 Campos estático e instância

  • 10.5.5.1 Inicialização de campo estático

  • 10.6.2 Métodos estático e instância

  • 10.7.1 Propriedades estáticas e instância

  • 10.8.3 Eventos estático e instância

  • 10,12 Construtores estáticos

Consulte também

Conceitos

Guia de Programação C#

Referência

Palavras-chave C#

Modificadores (referência C#)

Classes estáticas e membros de classe estáticos (guia de programação C#)

Outros recursos

Referência C#