static (odwołanie w C#)
Ta strona obejmuje static
słowo kluczowe modyfikatora. Słowo static
kluczowe jest również częścią using static
dyrektywy .
Modyfikator służy static
do deklarowania statycznego elementu członkowskiego, który należy do samego typu, a nie do określonego obiektu. Modyfikator static
może służyć do deklarowania static
klas. W klasach, interfejsach i strukturach można dodać static
modyfikator do pól, metod, właściwości, operatorów, zdarzeń i konstruktorów. Modyfikator static
nie może być używany z indeksatorami ani finalizatorami. Aby uzyskać więcej informacji, zobacz Klasy statyczne i składowe klas statycznych.
Modyfikator można dodać static
do funkcji lokalnej. Statyczna funkcja lokalna nie może przechwytywać zmiennych lokalnych ani stanu wystąpienia.
Modyfikator można dodać static
do wyrażenia lambda lub metody anonimowej. Statyczna metoda lambda lub anonimowa nie może przechwytywać zmiennych lokalnych ani stanu wystąpienia.
Przykład — klasa statyczna
Następująca klasa jest zadeklarowana jako static
i zawiera tylko static
metody:
static class CompanyEmployee
{
public static void DoSomething() { /*...*/ }
public static void DoSomethingElse() { /*...*/ }
}
Stała lub deklaracja typu jest niejawnie elementem static
członkowskim. Nie static
można odwoływać się do elementu członkowskiego za pośrednictwem wystąpienia. Zamiast tego odwołuje się do niego nazwa typu. Rozważmy na przykład następującą klasę:
public class MyBaseC
{
public struct MyStruct
{
public static int x = 100;
}
}
Aby odwołać się do static
elementu członkowskiego x
, użyj w pełni kwalifikowanej nazwy, MyBaseC.MyStruct.x
chyba że element członkowski jest dostępny z tego samego zakresu:
Console.WriteLine(MyBaseC.MyStruct.x);
Chociaż wystąpienie klasy zawiera oddzielną kopię wszystkich pól wystąpienia klasy, istnieje tylko jedna kopia każdego static
pola.
Nie można używać this
metod referencyjnych static
ani metod dostępu do właściwości.
static
Jeśli słowo kluczowe jest stosowane do klasy, wszystkie elementy członkowskie klasy muszą mieć wartość static
.
Klasy, interfejsy i static
klasy mogą mieć static
konstruktory. Konstruktor static
jest wywoływany w pewnym momencie między uruchomieniem programu a wystąpieniem klasy.
Uwaga
Słowo static
kluczowe ma bardziej ograniczone zastosowania niż w języku C++. Aby porównać je ze słowem kluczowym C++, zobacz Klasy magazynu (C++).
Aby zademonstrować static
członków, rozważ klasę reprezentującą pracownika firmy. Załóżmy, że klasa zawiera metodę zliczającą pracowników i pole do przechowywania liczby pracowników. Zarówno metoda, jak i pole nie należą do żadnego wystąpienia pracownika. Zamiast tego należą do klasy pracowników jako całości. Należy je zadeklarować jako static
składowe klasy.
Przykład — pole statyczne i metoda
W tym przykładzie odczytuje nazwę i identyfikator nowego pracownika, zwiększa licznik pracownika o jeden i wyświetla informacje dla nowego pracownika oraz nową liczbę pracowników. Ten program odczytuje bieżącą liczbę pracowników z klawiatury.
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: {e.name}");
Console.WriteLine($"ID: {e.id}");
Console.WriteLine($"New Number of Employees: {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
*/
Przykład — inicjowanie statyczne
W tym przykładzie pokazano, że można zainicjować static
pole przy użyciu innego static
pola, które nie zostało jeszcze zadeklarowane. Wyniki będą niezdefiniowane do momentu jawnego przypisania wartości do static
pola.
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
*/
specyfikacja języka C#
Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.