Udostępnij za pośrednictwem


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.xchyba ż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#.

Zobacz też