static (odwołanie w C#)static (C# Reference)

Użyj static modyfikator, aby zadeklarować statyczną składową, która należy do samego typu, a nie do określonego obiektu.Use the static modifier to declare a static member, which belongs to the type itself rather than to a specific object. static Modyfikator mogą być używane z klasy, pola, metody, właściwości, operatory, zdarzenia i konstruktory, ale nie można używać z indeksatorów, finalizatory lub typów innych niż klasy.The static modifier can be used with classes, fields, methods, properties, operators, events, and constructors, but it cannot be used with indexers, finalizers, or types other than classes. Aby uzyskać więcej informacji, zobacz klasy statyczne i statyczne elementy członkowskie klasy.For more information, see Static Classes and Static Class Members.

PrzykładExample

Następujące klasy jest zadeklarowana jako static i zawiera tylko static metody:The following class is declared as static and contains only static methods:

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

Deklaracja stałej lub typu jest niejawnie statyczny element członkowski.A constant or type declaration is implicitly a static member.

Statyczny element członkowski nie może być przywoływany przez wystąpienie.A static member cannot be referenced through an instance. Zamiast tego jest przywoływany przez nazwę typu.Instead, it is referenced through the type name. Na przykład rozważmy następujące klasy:For example, consider the following class:

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

Aby odwołać się do statycznej składowej x, użyj w pełni kwalifikowanej nazwy MyBaseC.MyStruct.x, chyba że składowych jest możliwy z tym samym zakresie:To refer to the static member x, use the fully qualified name, MyBaseC.MyStruct.x, unless the member is accessible from the same scope:

Console.WriteLine(MyBaseC.MyStruct.x);

Chociaż wystąpienia klasy zawiera osobną kopię wszystkie pola wystąpienia klasy, ma tylko jedną kopię każdego pola statyczne.While an instance of a class contains a separate copy of all instance fields of the class, there is only one copy of each static field.

Nie jest możliwe użycie to można odwoływać się do metody statyczne lub właściwość metody dostępu.It is not possible to use this to reference static methods or property accessors.

Jeśli static — słowo kluczowe jest stosowany do klasy, wszystkie elementy członkowskie klasy muszą być statyczne.If the static keyword is applied to a class, all the members of the class must be static.

Klasy i klas statycznych mogą mieć konstruktorów statycznych.Classes and static classes may have static constructors. Konstruktory statyczne są nazywane w pewnym momencie między po uruchomieniu programu i tworzenia wystąpienia klasy.Static constructors are called at some point between when the program starts and the class is instantiated.

Uwaga

static — Słowo kluczowe podlega większym ograniczeniom niż w języku C++.The static keyword has more limited uses than in C++. Aby porównać ze słowem kluczowym C++, zobacz klasy magazynu (C++).To compare with the C++ keyword, see Storage classes (C++).

Aby zademonstrować statyczne elementy członkowskie, należy wziąć pod uwagę klasa, która reprezentuje pracowników firmy.To demonstrate static members, consider a class that represents a company employee. Załóżmy, że klasa zawiera metodę, aby liczba pracowników i pola, do przechowywania liczby pracowników.Assume that the class contains a method to count employees and a field to store the number of employees. Pola i metody nie należą do dowolnego wystąpienia pracownika.Both the method and the field do not belong to any instance employee. Zamiast tego należą do klasy firmy.Instead they belong to the company class. W związku z tym powinny zostać zadeklarowane jako statyczne elementy członkowskie klasy.Therefore, they should be declared as static members of the class.

PrzykładExample

W tym przykładzie odczytuje nazwy i Identyfikatora nowych pracowników, zwiększa licznik pracowników za pomocą jednej i wyświetla informacje o nowych pracowników i liczba nowych pracowników.This example reads the name and ID of a new employee, increments the employee counter by one, and displays the information for the new employee and the new number of employees. Dla uproszczenia ten program odczytuje bieżąca liczba pracowników przy użyciu klawiatury.For simplicity, this program reads the current number of employees from the keyboard. W rzeczywistej aplikacji należy przeczytać te informacje z pliku.In a real application, this information should be read from a file.

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ładExample

Ten przykład pokazuje, że mimo że można zainicjować pole statyczne za pomocą innego pola statyczne niezgłoszonych, wyniki będą niezdefiniowane aż jawnie przypisać wartości do pola statycznego.This example shows that although you can initialize a static field by using another static field not yet declared, the results will be undefined until you explicitly assign a value to the static field.

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#C# language specification

Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#.For more information, see the C# Language Specification. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.The language specification is the definitive source for C# syntax and usage.

Zobacz takżeSee also