为什么静态类的构造函数似乎永远不会被调用?

时间:2016-02-04 14:11:53

标签: c# static console

我在C#中编写控制台应用程序。当应用程序运行时,我需要它在做任何工作之前检查一些事情,例如是否存在某些设置和目录。我有一个静态类存储在Logging.cs中,我已经将检查放在这个类的构造函数中,但它似乎永远不会被调用。

这是一个非常基本的例子:

Program.cs

internal class Program
{
    private static void Main(string[] args)
    {
        Console.WriteLine("Started application");
        Console.ReadKey(); // Stops the application exiting so I can read the output
    }
}

Logging.cs

internal static class Logging
{
    static Logging()
    {
        // The checks are all here, for the demo we'll just use WriteLine
        Console.WriteLine("Logging constructor");
    }
}

预期的控制台输出:

  

开始申请
  记录构造函数< - 此行永远不会出现

我知道我可以在名为Logging的{​​{1}}类中创建一个静态方法,并在Program.cs中从DoStartupChecks调用它,但我想了解我所做的事情这里做错了。也许答案是创建方法并调用它但我想先了解为什么上面的例子是错误的。

1 个答案:

答案 0 :(得分:5)

第一次引用类时调用静态构造函数,例如通过调用它的任何成员,通过创建它的实例或通过调用它的方法。

因此你必须写下这样的东西:

private static void Main(string[] args)
{
    Logging.DoSomething();
    Console.WriteLine("Started application");
    Console.ReadKey(); // Stops the application exiting so I can read the output
}

From MSDN

  

在创建第一个实例之前自动调用[静态构造函数]   静态成员被引用。