Alles über das statische Schlüsselwort mit C#

Alles über das statische Schlüsselwort mit C#

In diesem Artikel werde ich über das Schlüsselwort static in C# sprechen und wo es wie statische Variablen, statische Klassen, statische Methoden und statische Konstruktoren verwendet werden kann.

Beginnen wir mit der Untersuchung der statischen Klasse in C#.

Statische Klasse in C#

Statische Klassen in C# haben die Absicht, niemals instanziiert zu werden. Es enthält eine Gruppe statischer Datenmember und statischer Memberfunktionen. Wir können sagen, dass die Klasse existiert, um eine Reihe verwandter statischer Mitglieder zusammenzufassen.

Statisches Schlüsselwort kann nur auf die Referenztypen angewendet werden, d.h. Klassen und nicht auf den Werttyp (Strukturen), da Werttypen immer erstellt werden, um instanziiert zu werden.

Wichtige Punkte für die statische Klasse in C#

  1. Statische Klassen können mit dem Schlüsselwort static deklariert werden, während eine Klasse selbst deklariert wird, ansonsten wäre es eine einfache Klasse, die instanziiert werden kann.
  2. Es gibt keinen Standardkonstruktor für die statische Klasse..
  3. Die Klasse wird nur vom System.Object abgeleitet und keine andere Klasse oder Schnittstelle kann geerbt werden, da die Vererbung für die Instanz der Klasse gilt, da eine statische Klasse nicht instanziiert werden kann.
  4. Diese Klasse kann nicht als Feld, Methodenparameter oder lokale Variable verwendet werden, da diese alle die Instanz der Klasse darstellen.
  5. Statische Klassen sind versiegelt und abstrakt in der Natur.
  6. Die Verwendung der statischen Methode hat eine bessere Leistung als die Verwendung der Instanzmethode, da die CLR für die statische Methode den Aufruf  ausgibt IL-Anweisung. Mehr darüber habe ich in einem meiner Artikel hier behandelt
  7. System.Math und System.Console sind gute Beispiele für statische Klassen.

Am Ende dieses Artikels zeige ich Ihnen, wie Sie eine statische Klasse erstellen und wie sie verwendet werden kann.

Statischer Konstruktor

Statische Konstruktoren werden verwendet, um die statischen Felder einer Klasse zu initialisieren. Statische Feldinitialisierer werden unmittelbar vor dem Aufruf der statischen Konstruktoren ausgeführt. Wenn ein Typ keinen statischen Konstruktor hat, werden Feldinitialisierer kurz vor dem verwendeten Typ ausgeführt, oder es hängt vollständig von der Laufzeit ab, wann sie ausgeführt werden. Das bedeutet, dass das Vorhandensein der statischen Konstruktoren es den statischen Feldinitialisierern erlaubt, später im Programm ausgeführt zu werden.

Der einzige Punkt, den wir über statische Initialisierer beachten sollten, ist, dass sie vollständig threadsicher sind da sie in .NET oder C# so funktionieren, dass nur ein Thread im statischen Initialisierer vorhanden ist und CLR ihn sehr effizient verwaltet.

Statische Feldinitialisierer werden in der Reihenfolge ausgeführt, in der sie in der Klasse deklariert werden. Statische Felder können im Gegensatz zu Konstanten (die ich hier besprochen habe) jeden Typs haben .), die nur primitive Typen wie int, string usw. sein können.

    public class MyClass
    {
        public static int myVar = myVar1; // myVar = 0;
        public static int myVar1 = 3; // myVar = 0
    }

Aber wenn wir die Ausführung beider Codeanweisungen der obigen Klasse vertauschen, wird der Wert von myVar in diesem Fall auf 3 initialisiert.

Statisches Klassenbeispiel

In diesem Teil des Artikels werde ich über ein Beispiel diskutieren, das meiner Meinung nach der richtige Kandidat für die Verwendung einer statischen Klasse sein könnte. Angenommen, ich möchte in meinem Projekt einen einzelnen Speicher für einen Teil der Sammlung haben, damit er in der gesamten Anwendung einheitlich ist. In diesem Fall kann ich die Klasse als statisch deklarieren. Wie im folgenden Codeausschnitt gezeigt, möchte ich eine Sammlung von Person-Klassen in meinem Projekt verwalten und ich sollte in der Lage sein, die Daten aus der Sammlung hinzuzufügen oder daraus abzurufen. Bitte beachten Sie, dass dieses Beispiel nicht Thread-sicher ist. Mehr über Thread-Sicherheit können Sie hier lesen.

   public class Person
    {
        public string Name { get; set; }     
    }

    public static class PersonCollection
    {
        private static IList personList = new List();

        static PersonCollection()
        {
            personList = PopulatePerson();
        }

        private static IList PopulatePerson()
        {
            //Populate from DataSource
            return new List();
        }

        public static Person GetPerson(Person p)
        {
            if(personList.Where(item => item.Name.Equals(p.Name)).Count() > 0)
            {
                return personList.Where(item => item.Name.Equals(p.Name)).ElementAt(0);
            }
            return null;
        }

        public static void AddPerson(Person p)
        {
            personList.Add(p);
            AddToSource(p);
        }

        private static void AddToSource(Person p)
        {
            //update the newly added person to daatsource
        }
    }

In diesem Artikel habe ich über das Schlüsselwort static und verschiedene Verwendungen des Schlüsselworts static mit Klassen und Konstruktoren sowie mit den Feldern gesprochen.