为什么我的静态类的构造函数似乎从未被调用过

本文关键字:调用 我的 静态类 构造函数 为什么 | 更新日期: 2023-09-27 18:33:10

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

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

程序.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
    }
}

日志记录.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类中创建一个名为 DoStartupChecks 的静态方法,并在 Program.cs 中从Main调用它,但我想了解我在这里做错了什么。也许答案是创建方法并调用它,但我想先了解为什么上面的例子是错误的。

为什么我的静态类的构造函数似乎从未被调用过

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

因此,您必须编写如下内容:

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

从 MSDN:

它 [静态构造函数] 在创建第一个实例之前自动调用,或者任何 引用静态成员。