我使用以下代码调用类的静态ctor:

Type type;
System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(type.TypeHandle);

这会导致cctor运行两次吗?

最佳答案

RunClassConstructor 仅运行一次静态构造函数,即使您两次调用它也是如此。你试一试 ;)

using System.Runtime.CompilerServices;
...

void Main()
{
    RuntimeHelpers.RunClassConstructor(typeof(Foo).TypeHandle);
    RuntimeHelpers.RunClassConstructor(typeof(Foo).TypeHandle);
    Foo.Bar();
}

class Foo
{
    static Foo()
    {
        Console.WriteLine("Foo");
    }

    public static void Bar()
    {
        Console.WriteLine("Bar");
    }
}

此代码打印:

关于c# - 是否可以保证RunClassConstructor仅运行一次类型的静态构造函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2658561/

10-10 06:08