C#:确定类是否已经初始化

时间:2018-11-15 13:17:19

标签: c# reflection

我在程序集中有很多类,我不能或不想修改。在运行时的某个时刻,我想知道其中的哪些已被“初始化”:静态初始化程序(=静态构造函数)已运行。

有没有办法通过反射或其他方式做到这一点?

有关信息,并非在加载程序集时初始化程序集中的每个类。可以通过以下代码轻松观察到这一点:

public static class Foo
{
    static Foo() { MainClass.Value = "Something"; }
    public static void DoSomething() { Thread.Sleep(100); }
}

public static class MainClass
{
    public static string Value = "Nothing";

    public static void Main()
    {
        Console.WriteLine(Value);
        Foo.DoSomething();
        Console.WriteLine(Value);
    }
}

显示:

Nothing
Something

1 个答案:

答案 0 :(得分:0)

HimBromBeerethis article所述,

  

在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。

因此,您需要使用一次类,属性,方法等等来对其进行初始化...您无法控制它,无法以编程方式调用它,并且如果您想知道静态构造函数已被使用,您将使用该类,因此可以在此时调用它。

Rango所述,如果您确实需要了解...

,则可以在构造函数中使用标志。