为什么我们需要静态构造函数?

iJa*_*ade 9 c# asp.net static constructor

首先,我得到了一个答案:静态构造函数的用途是什么?,但我想在这方面得到答案.

这是我的C#静态类:

public static class BasicClass
{
    static int i = 0;
    static BasicClass()
    {
        i = 10;
    }

    public static void Temp()
    {
        //some code
    }


    public static void Temp1()
    {
        //some code
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里我有一个静态变量i,在第一次调用时初始化为10.所以基本上它可能是静态构造函数的目的,但是如果不通过初始化声明静态构造函数来实现同样的事情,那么static int i = 10 它只能被初始化一次.

那为什么我们需要一个静态构造函数呢?或者我在理解静态构造函数的概念或使用方面完全错误了吗?

Fré*_*idi 23

如果将该类编译为程序集,然后使用ILSpy或类似的方法来反汇编结果,您会注意到所有静态成员初始化都是在静态构造函数中执行的.

例如,以下C#代码:

public static class BasicClass
{
    static int i = 10;
}
Run Code Online (Sandbox Code Playgroud)

将产生相当于IL的IL:

public static class BasicClass
{
    static int i;

    static BasicClass()
    {
        i = 10;
    }
}
Run Code Online (Sandbox Code Playgroud)

换句话说,直接初始化只是C#编译器提供的语法糖.在引擎盖下,仍然实现了静态构造函数.


RMa*_*lke 6

那么,在你的例子中它确实不需要,但想象什么时候i必须从数据库,文本文件或任何其他资源中读取值?您可能需要以下内容:

static BasicClass()
{
    using (SomeConnection con = Provider.OpenConnection())
    {
        try
        {
            // Some code here
        }
        catch
        {
            // Handling expeptions, setting default value
            i = 10;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在无法声明和初始化静态字段,使用静态构造函数可以更好地服务