代码之家  ›  专栏  ›  技术社区  ›  mafu

RunClassConstructor是否保证只运行一次类型的静态构造函数?

  •  8
  • mafu  · 技术社区  · 16 年前

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

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

    这会导致CCTOR运行两次吗?

    1 回复  |  直到 8 年前
        1
  •  8
  •   Glenn Slayden    8 年前

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

    此代码打印:


    酒吧