c#静态类构造函数

本文关键字:构造函数 静态类 | 更新日期: 2023-09-27 18:02:23

是否有关于如何为静态类创建构造函数的工作?

我需要在类初始化时加载一些数据,但我需要一个且只有一个对象

c#静态类构造函数

c#有一个用于此目的的静态构造函数

static class YourClass
{
    static YourClass()
    {
        // perform initialization here
    }
}
From MSDN:

静态构造函数用于初始化任何静态数据,或执行只需要执行一次的特定操作。它在创建第一个实例或任何静态成员被引用

MSDN联系

静态构造函数是这样的

static class Foo
{
    static Foo()
    {
         // Static initialization code here
    }
}

仅在第一次使用该类型时执行一次。所有类都可以有静态构造函数,而不仅仅是静态类。

可以,静态类可以有静态构造函数,使用这个构造函数就是初始化静态成员。

static class Employee1
{
    static int EmpNo;
    static Employee1()
    {
        EmpNo = 10;
        // perform initialization here
    }
    public static void Add()
    { 
    }
    public static void Add1()
    { 
    }
}

和静态构造函数只在访问类名Class1

的静态类的任何类型成员时调用一次。

假设您正在访问第一个EmployeeName字段,然后这次调用构造函数,之后它将不会被调用,即使您将访问相同的类型成员。

 Employee1.EmployeeName = "kumod";
        Employee1.Add();
        Employee1.Add();

Static constructor只调用创建的类的第一个实例。

:

static class YourClass
{
    static YourClass()
    {
        //initialization
    }
}

可以创建静态构造函数

static class StaticParent 
{
  StaticParent() 
  {
    //write your initialization code here
  }
}

,且总是parameter less

static class StaticParent
{
    static int i =5;
    static StaticParent(int i)  //Gives error
    {
      //write your initialization code here
    }
}

没有访问修饰符

可以使用静态构造函数初始化静态变量。静态构造函数将是类

的入口点。
public class MyClass
{
    static MyClass()
    {
        //write your initialization code here
    }
}

静态类不能有实例构造函数(与公认的答案不同)。但是,类可以有静态构造函数。

在c# 9中,有ModuleInitializer属性,它比静态构造函数要好得多。以下是来自链接网站的优点:

  • 允许库在加载时立即进行一次性初始化,开销最小,用户无需显式调用任何
  • 当前静态构造函数方法的一个特别的痛点是,运行时必须对带有静态构造函数的类型的使用情况进行额外的检查,以便决定是否需要运行静态构造函数。这会增加可测量的开销。
  • 允许源生成器运行一些全局初始化逻辑,而不需要用户显式调用任何

这些都是非常重要的点,可以在静态类中使用如下属性:

[ModuleInitializer]
public static void Init()
{
    // Logic
}