C# 静态类构造函数

Posted

技术标签:

【中文标题】C# 静态类构造函数【英文标题】:C# static class constructor 【发布时间】:2011-10-07 00:02:31 【问题描述】:

有没有办法解决如何为静态类创建构造函数?

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

【问题讨论】:

【参考方案1】:

C#为此目的有一个静态构造函数。

static class YourClass

    static YourClass()
    
        // perform initialization here
    

来自 MSDN

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

MSDN link

【讨论】:

请注意,YourClass 不一定是 static 公平地说,原发帖人确实专门询问了静态类的构造函数。【参考方案2】:

静态构造函数如下所示

static class Foo

    static Foo()
    
         // Static initialization code here
    

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

【讨论】:

实际上“在创建第一个实例或引用任何静态成员之前自动调用它”msdn.microsoft.com/en-us/library/k9x6w0hc.aspx【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

像这样:

static class YourClass

    static YourClass()
    
        //initialization
    

【讨论】:

【参考方案5】:

我们可以创建静态构造函数

static class StaticParent 

  StaticParent() 
  
    //write your initialization code here

  


而且总是少参数。

static class StaticParent

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

而且它没有访问修饰符

【讨论】:

【参考方案6】:

您可以使用静态构造函数来初始化静态变量。静态构造函数将是您的类的入口点

public class MyClass


    static MyClass()
    

        //write your initialization code here
    


【讨论】:

静态构造函数没有访问修饰符,这将是一个编译错误

以上是关于C# 静态类构造函数的主要内容,如果未能解决你的问题,请参考以下文章

c# 有调用一个类的静态方法,是不是执行这个类的构造函数

C#静态类,构造函数带参数

C# 构造函数总结

C#类的初始化顺序

编写高质量代码改善C#程序的157个建议——建议106:为静态类添加静态构造函数

如何为父类构造函数提供值,其中父构造函数的参数比c#中静态void main的子类多? [关闭]