RunClassConstructor, как гарантируют, выполнит статического конструктора типа только однажды?

Я называю статический ctor класса с помощью этого кода:

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

Это может заставить cctor быть выполненным дважды?

8
задан Gordon Gustafson 17 April 2010 в 13:51
поделиться

1 ответ

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

Этот код выводит:

Foo
Bar

9
ответ дан 5 December 2019 в 18:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: