Der statische Konstruktor wird verwendet, um statische Daten zu initialisieren oder bestimmte Vorgänge auszuführen Der Inhalt, der übersetzt werden muss, ist: Vorgänge, die vor dem ersten Aufruf automatisch ausgeführt werden Wenn eine Instanz erstellt oder auf ein statisches Mitglied verwiesen wird.
Statische Konstruktoren sind sehr nützlich beim Erstellen von Wrapper-Klassen für nicht verwalteten Code. Wenn der Konstruktor die LoadLibrary-Methode aufrufen kann. Das Gleiche gilt für statische Konstruktoren Praktischer Ort zum Erzwingen von Typparametern, die zur Laufzeit nicht überprüft werden können Die Einschränkungen werden zur Kompilierzeit überprüft.
Der statische Konstruktor hat die folgenden Eigenschaften: −
Der statische Konstruktor akzeptiert keine Zugriffsmodifikatoren oder Parameter.
Eine Klasse oder Struktur kann nur einen statischen Konstruktor haben.
Statische Konstruktoren können nicht vererbt oder überladen werden.
Statischer Konstruktor kann nicht direkt aufgerufen werden, er kann nur über andere Methoden aufgerufen werden
Der Benutzer hat keine Kontrolle darüber, wann der statische Konstruktor ausgeführt wird Programm.
Der statische Konstruktor wird automatisch aufgerufen, bevor die Klasse initialisiert wird Die erste Instanz wird erstellt oder referenziert alle statischen Mitglieder. eine Statik Der Konstruktor wird vor dem Instanzkonstruktor ausgeführt. statischer Konstruktor des Typs Wird aufgerufen, wenn eine statische Methode einem Ereignis oder Delegaten zugewiesen und aufgerufen wird Und nicht, wenn es zugewiesen wird. Wenn ein statischer Feldvariableninitialisierer vorhanden ist Klasse des statischen Konstruktors werden sie in der Textreihenfolge in ausgeführt Eine Klasse mit statischen Konstruktoren, die in Textreihenfolge ausgeführt werden Sie erscheinen vor der Ausführung in der Klassendeklaration Wenn Sie keinen statischen Konstruktor zum Initialisieren statischer Felder bereitstellen, werden alle statischen Felder beim ersten Zugriff automatisch in der Reihenfolge initialisiert, in der sie deklariert wurden.
Das Vorhandensein eines statischen Konstruktors verhindert das Hinzufügen Eigenschaft vom Typ BeforeFieldInit. Dadurch wird die Laufzeitoptimierung eingeschränkt.
Ein als statisch schreibgeschützt deklariertes Feld kann nur als Teil davon zugewiesen werden in einer Deklaration oder einem statischen Konstruktor. Wenn es keinen expliziten statischen Konstruktor gibt Der Inhalt, der übersetzt werden muss, ist: erforderlich, initialisieren Sie statische Felder bei der Deklaration und nicht durch eine statische Der Inhalt, der übersetzt werden muss, ist: erforderlich, initialisieren Sie statische Felder bei der Deklaration und nicht durch eine statische Konstruktoren werden zur besseren Laufzeitoptimierung verwendet.
Live-Demonstration
using System; namespace DemoApplication{ public class Program{ static void Main(string[] args){ Car user = new Car(); Car user1 = new Car(); Console.ReadLine(); } } public class Car{ static Car(){ Console.WriteLine("Static constructor called"); } public Car(){ Console.WriteLine("Default constructor called"); } } }
Static constructor called Default constructor called Default constructor called
Im obigen Beispiel können wir sehen, dass der statische Konstruktor nur einmal aufgerufen wird.
Online-Demonstration
using System; using System.Threading; namespace DemoApplication{ public class Car{ protected static readonly DateTime globalStartTime; protected int RouteNumber { get; set; } static Car(){ globalStartTime = DateTime.Now; Console.WriteLine($"Static constructor called. Global start time: {globalStartTime.ToLongTimeString()}"); } public Car(int routeNum){ RouteNumber = routeNum; Console.WriteLine($"Car {RouteNumber} is created."); } public void Drive(){ TimeSpan elapsedTime = DateTime.Now - globalStartTime; Console.WriteLine($"Car {this.RouteNumber} is starting its route {elapsedTime.Milliseconds} minutes after global start time {globalStartTime.ToShortTimeString()}."); } } class TestCar{ static void Main(){ Car car1 = new Car(1); Car car2 = new Car(2); car1.Drive(); Thread.Sleep(25); car2.Drive(); Console.ReadLine(); } } }
Static constructor called. Global start time: 7:09:06 AM Car 1 is created. Car 2 is created. Car 1 is starting its route25 minutes after global start time7:09 AM. Car 2 is starting its route50 minutes after global start time7:09 AM.
Das obige ist der detaillierte Inhalt vonWozu dient der statische Konstruktor in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!