Я пишу консольное приложение в 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 конструктор < - Эта строка никогда не появляется
Я знаю, что я мог бы создать статический метод внутри Logging
класса под названием DoStartupChecks
и вызвать его из Main
в Program.cs, но я хочу, чтобы понять, что я сделал неправильно здесь. Возможно, ответ заключается в том, чтобы создать метод и вызвать его, но я хочу понять, почему приведенный выше пример неправильный.
Вы уже являетесь участником класса? –
Статический конструктор получает имя при первом использовании класса, а не при загрузке вашей программы. Таким образом, ваш пример действительно не вызовет вызов конструктора. – Mark
Хорошо, что имеет смысл. Я думал, что создание его static создаст экземпляр и, следовательно, вызовет конструктор. Это имеет смысл. Благодарю. – Equalsk