8

このコードを使用して、クラスの静的コンストラクターを呼び出しています。

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

これにより、cctorが2回実行される可能性がありますか?

4

1 に答える 1

9

RunClassConstructor静的コンストラクターは、2回呼び出しても、1回だけ実行されます。ちょうど試して ;)

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

このコードは次のように出力します。

Foo
Bar

于 2010-04-17T14:07:46.940 に答える