Comments 2
Стоит только помнить, что если определить статическое поле того же типа, то при его инициализации конструктор экземпляра будет вызван до пользовательского кода в статическом конструкторе.
class Strange {
public static Strange s = new Strange("first");
static Strange(){
Console.WriteLine("second");
}
Strange(string str){
Console.WriteLine(str);
}
}
class Program
{
static void Main(string[] args)
{
Strange strange = new("third");
}
}
class Strange {
public static Strange s = new Strange("first");
static Strange(){
Console.WriteLine("second");
}
public Strange(string str){
Console.WriteLine(str);
}
}
В таком случае у вас все будет по порядку - сначала идет работа стат конструктора (поля + сам конструктор). И как раз поле для статики будет первой (у нее сработает конструктор 1 раз только тк это статика). После стат конструктора идет обычный конструкор уже нашего класса. Всё логично и правильно. Главное не делать поле такого же класса обыным (не статик), а то стек упадёт
Sign up to leave a comment.
Порядок инициализации полей, статики и всего остального в C#