Static constructor is used to initialize any static data, or perform specific operations The content that needs to be translated is: Operations that are automatically performed before the first call When an instance is created or any static member is referenced.
Static constructors are useful when creating wrapper classes for unmanaged code. When the constructor can call the LoadLibrary method. The same goes for static constructors Convenient place to enforce type parameters that cannot be checked at runtime The constraints are checked at compile time.
The static constructor has the following properties −
The static constructor does not accept access modifiers or parameters.
A class or structure can only have one static constructor.
Static constructors cannot be inherited or overloaded.
The static constructor cannot be called directly, but can only be called through other methods
The user has no control over when the static constructor is executed program.
The static constructor is automatically called before initializing the class The first instance is created or references any static members. a static The constructor will run before the instance constructor. static constructor of type Called when a static method is assigned to an event or delegate and is called And not when assigned. If a static field variable initializer exists in class of the static constructor, they will be executed in the textual order in A class with static constructors that will be executed in text order They appear in the class declaration before execution If you do not provide a static constructor to initialize static fields, all static fields will be automatically initialized on first access in the order in which they were declared.
The existence of a static constructor will prevent addition BeforeFieldInit type property. This limits runtime optimization.
A field declared as static readonly can only be assigned as part of it in a declaration or static constructor. When there is no explicit static constructor The content that needs to be translated is: required, initialize static fields at declaration, rather than through a static The content that needs to be translated is: required, initialize static fields at declaration, rather than through a static Constructors are used for better runtime optimization.
Real-time 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
In the above example, we can see that the static constructor only is called once.
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.
The above is the detailed content of What is the use of static constructor in C#?. For more information, please follow other related articles on the PHP Chinese website!