Короче говоря, я хотел бы знать, есть ли способ отложить инициализацию статических полей в классе.Статический класс - инициализация отложенного поля
Я не могу создавать экземпляры определенного класса до тех пор, пока не будут установлены другие значения. Пример:
private void Form1_Load(object sender, EventArgs e)
{
Foo.Init();
// initialize static Bar fields
}
Ниже Bar
экземпляров требует некоторых значений, установленных в Foo.Init()
.
public static class Bars
{
public static Bar bar = new Bar();
}
Это не будет работать, так как Bar
поля экземпляра до того Foo.Init()
выполняется.
Единственное решение, которое я могу придумать что-то вроде
public static class Bars
{
public static Bar bar;
public static void Init()
{
bar = new Bar();
}
}
и запустить Bars.Init()
после Foo.Init()
.
Это единственный способ решить эту проблему?
'Пользователь не имеет никакого контроля о том, когда статический конструктор выполняется в программе. Могу ли я быть уверенным, что он не будет выполнен до 'Foo.Init()'? – Johan
Статические конструкторы вызывают первый раз, когда вы получаете доступ к статическим членам класса, вам не нужно называть это самим. –