English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# statische Klasse, Methode, Konstruktor, Feld

In C# bedeutet statisch, dass es nicht instanziiert werden kann. Sie können keine Objekte der statischen Klasse erstellen und auch keine statischen Mitglieder über ein Objekt aufrufen.

Klassen, Variablen, Methoden, Eigenschaften, Operatoren, Ereignisse und Konstruktoren können mit dem Schlüsselwort static als statisch definiert werden.

Statische Klasse

Verwenden Sie den Modifikator static vor dem Klassennamen und nach dem Zugriffsmodifikator, um die Klasse statisch zu machen. Unten ist eine statische Klasse mit statischen Feldern und Methoden definiert.

public static class Calculator
{
    private static int _resultStorage = 0;
    
    public static string Type = "Arithmetic";
    public static int Sum(int num1, int num2)
    {
        return num1 + num2;
    }
    public static void Store(int result)
    {
        _resultStorage = result;
    }
}

Die obige Calculator-Klasse ist statisch. Alle ihre Mitglieder sind auch statisch.

Sie können keine Objekte der statischen Klasse erstellen. Daher können Sie die statischen Mitglieder der Klasse ClassName.MemberName direkt über den Klassennamen und den Zugriffsmodifikator wie folgt aufrufen.

class Program
{
    static void Main(string[] args)
    {
        var result = Calculator.Sum(10, 25); //Aufruf statischer Methoden
        Calculator.Store(result); 
        var calcType = Calculator.Type; // Zugriff auf statische Variablen
        Calculator.Type = "Scientific"; // Werte zuweisen an statische Variablen
    }
}

Regeln der statischen Klasse

  1. Statische Klassen können nicht instanziert werden.

  2. Alle Member der statischen Klasse müssen statisch sein. Andernfalls gibt der Compiler einen Fehler aus.

  3. Statische Klassen können statische Variablen, statische Methoden, statische Eigenschaften, statische Operatoren, statische Ereignisse und statische Konstruktoren enthalten.

  4. Statische Klassen können keine Instanzmember und Konstruktoren enthalten.

  5. Indizes und Destruktoren können nicht statisch sein

  6. var kann nicht zur Definition statischer Member verwendet werden. Sie müssen nach dem Schlüsselwort static die Member-Typen explizit angeben.

  7. Statische Klassen sind verklebte Klassen, daher können sie nicht abgeleitet werden.

  8. Statische Klassen können nicht von anderen Klassen abgeleitet werden.

  9. Man kann ClassName.MemberName (d.h. Klassenname.Mitgliedname) verwenden, um statische Class Member zuzugreifen.

  10. Statische Klassen bleiben während des gesamten Lebenszyklus der Anwendungssdomäne im Speicher.

Statische Member in nicht statischen Klassen

Regulare Klassen (nicht statische Klassen) können eine oder mehrere statische Methoden, Felder, Eigenschaften, Ereignisse und andere nicht statische Member enthalten.

Man kann einige statische Member verwenden, um nicht statische Klassen zu definieren, anstatt die gesamte Klasse als statische Klasse zu deklarieren, was praktischer ist.

Statische Felder

Man kann das Schlüsselwort static verwenden, um statische Felder in nicht statischen Klassen zu definieren.

Statische Felder nicht statischer Klassen werden zwischen allen Instanzen gemeinsam genutzt. Daher wird eine Änderung durch eine Instanz auf andere Instanzen übertragen.

public class StopWatch
{
    public static int InstanceCounter = 0;
    // Instanzkonstruktor
    public StopWatch()
    {
    }
}
class Program
{
    static void Main(string[] args)
    {
        StopWatch sw1 = new StopWatch();
        StopWatch sw2 = new StopWatch();
        Console.WriteLine(StopWatch.NoOfInstances); //2 
        StopWatch sw3 = new StopWatch();
        StopWatch sw4 = new StopWatch();
        Console.WriteLine(StopWatch.NoOfInstances);//4
    }
}

Statische Methode

Sie können eine oder mehrere statische Methoden in einer nicht statischen Klasse definieren. Statische Methoden können ohne die Erstellung eines Objekts aufgerufen werden. Sie können statische Methoden nicht mit einem Objekt einer nicht statischen Klasse aufrufen.

Statische Methoden können nur andere statische Methoden aufrufen und statische Member zugreifen. Sie können nicht auf nicht statische Member der Klasse in statischen Methoden zugreifen.

class Program
{
    static int counter = 0;
    string name = "Demo Program";
    static void Main(string[] args)
    {
        counter++; // Statische Felder können zugegriffen werden
        Display("Hello World!"); // Statische Methoden können aufgerufen werden
        name = "New Demo Program"; //Fehler: Der Zugriff auf nicht statische Member ist nicht möglich
        SetRootFolder("C:\MyProgram"); //Fehler: Der Zugriff auf nicht statische Methoden ist nicht möglich
    }
    static void Display(string text)
    {
        Console.WriteLine(text);
    }
    public void SetRootFolder(string path) { }
}

Regeln der statischen Methode

  1. Statische Methoden können vor dem Rückgabetyp mit dem Schlüsselwort static definiert werden, gefolgt von den Zugriffsmodifikatoren.

  2. Statische Methoden können überladen, aber nicht überschrieben werden.

  3. Statische Methoden können lokale statische Variablen enthalten.

  4. Statische Methoden können nicht auf nicht statische Variablen zugreifen oder aufrufen, es sei denn, sie werden explizit als Parameter übergeben.

Statischer Konstruktor

Eine nicht statische Klasse kann einen leeren statischen Konstruktor enthalten. Er kann mit dem Schlüsselwort static definiert werden, ohne Zugriffsmodifikatoren wie public, private und protected.

Das folgende Beispiel zeigt den Unterschied zwischen statischem Konstruktor und Instanzkonstruktor.

public class StopWatch
{
    // Statischer Konstruktor
    static StopWatch()
    {
        Console.WriteLine("Der statische Konstruktor wurde aufgerufen");
    }
    // Instanzkonstruktor
    public StopWatch()
    {
        Console.WriteLine("Der Instanzkonstruktor wurde aufgerufen");
    }
    // Statische Methode
    public static void DisplayInfo()
    {
        Console.WriteLine("DisplayInfo wurde aufgerufen");
    }
    // Instanzmethode
    public void Start() { }
    // Instanzmethode
    public void Stop() { }
}

Die nicht statische Klasse StopWatch enthält einen statischen Konstruktor und auch einen nicht statischen Konstruktor.

Der statische Konstruktor wird nur einmal aufgerufen, wenn eine statische Methode verwendet wird oder eine Instanz zum ersten Mal erstellt wird. Das folgende Beispiel zeigt, dass der statische Konstruktor beim ersten Aufruf einer static-Methode aufgerufen wird. Beim zweiten Aufruf einer statischen Methode wird der statische Konstruktor nicht aufgerufen.

StopWatch.DisplayInfo(); // Hier wird der statische Konstruktor aufgerufen
StopWatch.DisplayInfo(); // Hier wurde kein Konstruktor aufgerufen
Ausgabe:
Der statische Konstruktor wurde aufgerufen.
DisplayInfo wurde aufgerufen
DisplayInfo wurde aufgerufen

Der folgende Beispiel zeigt, dass der statische Konstruktor beim ersten Erstellen einer Instanz aufgerufen wird.

StopWatch sw1 = new StopWatch(); // Zuerst wird der statische Konstruktor aufgerufen, dann der Instanzkonstruktor 
StopWatch sw2 = new StopWatch();// Nur der Instanzkonstruktor wurde aufgerufen 
StopWatch.DisplayInfo();
Ausgabe:
Der statische Konstruktor wurde aufgerufen
Der Instanzkonstruktor wurde aufgerufen
Der Instanzkonstruktor wurde aufgerufen
DisplayInfo wurde aufgerufen

Regeln des statischen Konstruktors

  1. Der statische Konstruktor wird mit dem Schlüsselwort static definiert und verwendet keine Zugriffsmodifikatoren wie public, private oder protected.

  2. Nicht statische Klassen können einen leeren statischen Konstruktor enthalten. Parameterisierte statische Konstruktoren sind nicht erlaubt.

  3. Der statische Konstruktor wird im Lebenszyklus nur einmal ausgeführt. Daher kann in einem Fall, in dem eine Klasse an mehreren Stellen verwendet wird, nicht bestimmt werden, zu welchem Zeitpunkt sie im Anwendungsbereich aufgerufen wird.

  4. Der statische Konstruktor kann nur statische Mitglieder zugreifen. Er kann keine oder keine Instanzmitglieder enthalten oder aufrufen.

Statische Mitglieder werden in einem speziellen Bereich des Speichers namens 'Hochfrequenzspeicher' gespeichert. Statische Mitglieder nicht statischer Klassen werden zwischen allen Instanzen der Klasse gemeinsam genutzt. Daher wird eine Änderung, die von einer Instanz vorgenommen wird, auf alle anderen Instanzen übertragen.