Home  >  Article  >  Backend Development  >  What is the use of static constructor in C#?

What is the use of static constructor in C#?

WBOY
WBOYforward
2023-08-23 22:25:02860browse

What is the use of static constructor in C#?

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

Common Language Runtime (CLR). It will be called automatically.
  • 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.

  • Fields are initialized to their values ​​listed in Default Values ​​in C# If a static constructor throws an exception, it will not be called by the runtime the second time, and the type will remain uninitialized for its lifetime The application domain in which your program runs. Most commonly, a TypeInitializationException occurs when a static constructor is thrown Unable to instantiate type or when an unhandled exception occurs Static constructor. For implicit static constructors not explicitly defined Defined in source code, troubleshooting may require checking Intermediate language (IL) code.
  • 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.

  • Example

    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");
          }
       }
    }

    Output

    Static constructor called
    Default constructor called
    Default constructor called

    In the above example, we can see that the static constructor only is called once.

    Example

    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();
          }
       }
    }

    Output

    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!

    Statement:
    This article is reproduced at:tutorialspoint.com. If there is any infringement, please contact admin@php.cn delete