static (C#-Referenz)static (C# Reference)

Verwenden Sie den Modifizierer static, um einen statischen Member zu deklarieren, der zum Typ selbst gehört, anstatt zu einem bestimmten Objekt.Use the static modifier to declare a static member, which belongs to the type itself rather than to a specific object. Der Modifizierer static kann mit Klassen, Feldern, Methoden, Eigenschaften, Operatoren, Ereignissen und Konstruktoren verwendet werden, jedoch nicht mit Indexern, Finalizern oder Typen außer Klassen.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. Weitere Informationen finden Sie unter Statische Klassen und statische Klassenmember.For more information, see Static Classes and Static Class Members.

BeispielExample

Die folgende Klasse wird als static deklariert und enthält nur static-Methoden:The following class is declared as static and contains only static methods:

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

Die Deklaration einer Konstante oder eines Typs ist implizit ein statischer Member.A constant or type declaration is implicitly a static member.

Ein statischer Member kann nicht über eine Instanz verwiesen werden.A static member cannot be referenced through an instance. Stattdessen wird er über den Namen verwiesen.Instead, it is referenced through the type name. Betrachten Sie beispielsweise die folgende Klasse:For example, consider the following class:

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

Verwenden Sie zum Verweisen auf ein statischen Member x den vollqualifizierten Namen MyBaseC.MyStruct.x, außer es kann auf den Member vom selben Geltungsbereich zugegriffen werden: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);  

Während die Instanz einer Klasse eine separate Kopie aller Instanzfelder der Klasse enthält, gibt es nur eine Kopie von jedem statischen Feld.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.

Es ist nicht möglich, this zum Verweis auf statische Methoden oder Eigenschaftenaccessoren zu verwenden.It is not possible to use this to reference static methods or property accessors.

Wenn das Schlüsselwort static auf eine Klasse angewandt wird, müssen alle Member der Klasse statisch sein.If the static keyword is applied to a class, all the members of the class must be static.

Klassen und statische Klassen können über statische Konstruktoren verfügen.Classes and static classes may have static constructors. Statische Konstruktoren werden irgendwann zwischen Programmstart und Klasseninstanziierung aufgerufen.Static constructors are called at some point between when the program starts and the class is instantiated.

Hinweis

Die Verwendung des Schlüsselworts static ist in C# eingeschränkter als in C++.The static keyword has more limited uses than in C++. Vergleiche mit dem C++-Schlüsselwort finden Sie unter Speicherklassen (C++).To compare with the C++ keyword, see Storage classes (C++).

Stellen Sie sich zur Veranschaulichung von statischen Membern eine Klasse vor, die einen Angestellten eines Unternehmens darstellt.To demonstrate static members, consider a class that represents a company employee. Es wird angenommen, dass die Klasse eine Methode zum Zählen von Angestellten sowie ein Feld enthält, in dem die Anzahl von Angestellten gespeichert wird.Assume that the class contains a method to count employees and a field to store the number of employees. Sowohl die Methode als auch das Feld gehören nicht zu einem Instanzangestellten.Both the method and the field do not belong to any instance employee. Sie gehören stattdessen zur Unternehmensklasse.Instead they belong to the company class. Daher sollten sie als statische Member der Klasse deklariert werden.Therefore, they should be declared as static members of the class.

BeispielExample

In diesem Beispiel wird der Name und die ID eines neuen Angestellten gelesen, der Angestelltenzähler wird um 1 erhöht, und die Informationen zum neuen Angestellten sowie die neue Anzahl von Angestellten wird angezeigt.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. Der Einfachheit halber liest das Programm die aktuelle Anzahl von Angestellten von der Tastatur.For simplicity, this program reads the current number of employees from the keyboard. Bei einer realen Anwendung sollten diese Informationen aus einer Datei gelesen werden.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: {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
    */

BeispielExample

Dieses Beispiel zeigt, dass, obwohl Sie ein statisches Feld mit einem anderen noch nicht deklarierte, statischen Feld initialisieren können, die Ergebnisse undefiniert bleiben, bis Sie dem statischen Feld explizit einen Wert zuweisen.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
*/

C#-ProgrammiersprachenspezifikationC# Language Specification

Weitere Informationen erhalten Sie unter C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.

Siehe auchSee Also

C#-ReferenzC# Reference
C#-ProgrammierhandbuchC# Programming Guide
C#-SchlüsselwörterC# Keywords
ModifiziererModifiers
Statische Klassen und statische KlassenmemberStatic Classes and Static Class Members