Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Diese Seite behandelt das static
Modifizierer-Schlüsselwort. Das static
Schlüsselwort ist auch Teil der using static
Direktive.
Verwenden Sie den static
Modifizierer, um ein statisches Element zu deklarieren, das zum Typ selbst gehört, anstatt zu einem bestimmten Objekt. Der static
Modifizierer kann zum Deklarieren von static
Klassen verwendet werden. In Klassen, Schnittstellen und Strukturen können Sie den static
Modifizierer zu Feldern, Methoden, Eigenschaften, Operatoren, Ereignissen und Konstruktoren hinzufügen. Der static
Modifizierer kann nicht mit Indexern oder Finalizern verwendet werden. Weitere Informationen finden Sie unter "Static Classes" und "Static Class Members".
Sie können den static
Modifizierer einer lokalen Funktion hinzufügen. Eine statische lokale Funktion kann keine lokalen Variablen oder den Instanzstatus erfassen.
class Calc1
{
public void CalculateSum()
{
int a = 3;
int b = 7;
// Static local function - cannot access 'a' or 'b' directly
static int Add(int x, int y)
{
return x + y;
}
int result = Add(a, b);
Console.WriteLine($"Sum: {result}");
}
}
/*
Output:
Sum: 10
*/
Sie können den static
Modifizierer einem Lambda-Ausdruck oder einer anonymen Methode hinzufügen. Eine statische Lambda- oder anonyme Methode kann keine lokalen Variablen oder Den Instanzstatus erfassen.
class Calc2
{
static void Main()
{
Func<int, int, int> add = static (a, b) => a + b;
int result = add(5, 10);
Console.WriteLine($"Sum: {result}");
}
}
/*
Output:
Sum: 15
*/
Beispiel : statische Klasse
Diese Klasse wird als static
deklariert und enthält nur static
Methoden.
static class CompanyEmployee
{
public static void DoSomething() { /*...*/ }
public static void DoSomethingElse() { /*...*/ }
}
Eine Konstante oder Typdeklaration ist implizit ein static
Element. Auf ein static
Element kann nicht über eine Instanz verwiesen werden. Stattdessen wird er über den Typnamen verwiesen. Betrachten Sie beispielsweise die folgende Klasse:
public class MyBaseC
{
public struct MyStruct
{
public static int x = 100;
}
}
Verwenden Sie zum Verweisen auf einen static
-Member x
den vollqualifizierten Namen MyBaseC.MyStruct.x
, außer es kann auf den Member vom selben Geltungsbereich zugegriffen werden:
Console.WriteLine(MyBaseC.MyStruct.x);
Während eine Instanz einer Klasse eine separate Kopie aller Instanzfelder der Klasse enthält, gibt es nur eine Kopie jedes static
Felds. Bei generischen Typen verfügt jeder geschlossene generische Typ über eine eigene Kopie statischer Felder. Statische Felder, die mit ThreadStaticAttribute gekennzeichnet sind, haben jeweils eine Kopie pro Thread.
Es ist nicht möglich, this
zu verwenden, um Methoden oder Eigenschaftszugriffe in static
zu referenzieren.
Wenn das static
Schlüsselwort auf eine Klasse angewendet wird, müssen alle Member der Klasse sein static
.
Klassen, Schnittstellen und static
Klassen verfügen möglicherweise über static
Konstruktoren. Ein static
Konstruktor wird irgendwann zwischen dem Start des Programms und der Instanziierung der Klasse aufgerufen.
Hinweis
Das static
Schlüsselwort hat eine eingeschränkte Verwendung als in C++. Informationen zum Vergleichen mit dem C++-Schlüsselwort finden Sie unter Speicherklassen (C++).
Um Mitglieder zu veranschaulichen static
, ziehen Sie eine Klasse in Betracht, die einen Unternehmensmitarbeiter darstellt. Angenommen, die Klasse enthält eine Methode zum Zählen von Mitarbeitern und einem Feld zum Speichern der Anzahl der Mitarbeiter. Sowohl die Methode als auch das Feld gehören keiner Mitarbeiterinstanz. Stattdessen gehören sie zur Klasse der Mitarbeiter insgesamt. Sie sollten als static
Mitglieder der Klasse deklariert werden.
Beispiel : statisches Feld und Methode
In diesem Beispiel wird der Name und die ID eines neuen Mitarbeiters gelesen, der Mitarbeiterzähler um eins erhöht und die Informationen für den neuen Mitarbeiter und die neue Anzahl von Mitarbeitern angezeigt. Dieses Programm liest die aktuelle Anzahl der Mitarbeiter über die Tastatur.
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
*/
Beispiel : statische Initialisierung
In diesem Beispiel wird gezeigt, dass Sie ein Feld mithilfe eines static
anderen static
Felds initialisieren können, das noch nicht deklariert ist. Die Ergebnisse werden nicht definiert, bis Sie dem static
Feld explizit einen Wert zuweisen.
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#-Sprachspezifikation
Weitere Informationen finden Sie in der C#-Sprachspezifikation. Die Sprachspezifikation ist die endgültige Quelle für C#-Syntax und -Verwendung.