static (C# Reference)
Use o static modificador para declarar um membro estático, que pertence ao tipo de si mesmo, em vez de fazê-lo a um objeto específico. O static modificador pode ser usado com classes, campos, métodos, propriedades, operadores, eventos e construtores, mas não pode ser usado com os indexadores, destrutores ou tipos diferentes de classes. Para obter mais informações, consulte Static Classes and Static Class Members (C# Programming Guide).
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 o 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 o static palavra-chave é aplicado a uma classe, todos os membros da classe devem ser estático.
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.
Observação |
---|
O static palavra-chave mais limitou usa que em C++. Para comparar com a palavra-chave do C++, consulte Static (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 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ê pode 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 C# Language Specification A especificação de linguagem é a fonte definitiva para a sintaxe e o uso de C#.
Consulte também
Referência
Static Classes and Static Class Members (C# Programming Guide)