2014-10-13 6 views
0

Короче говоря, я хотел бы знать, есть ли способ отложить инициализацию статических полей в классе.Статический класс - инициализация отложенного поля

Я не могу создавать экземпляры определенного класса до тех пор, пока не будут установлены другие значения. Пример:

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().

Это единственный способ решить эту проблему?

ответ

1

вы можете инициализации статический класс с использованием статических конструкторов:

public static class Foo 
{ 
    public static int Result { get; set; } 

    static Foo() 
    { 
     Result = -1; 
    } 
} 

читать далее Here

+0

'Пользователь не имеет никакого контроля о том, когда статический конструктор выполняется в программе. Могу ли я быть уверенным, что он не будет выполнен до 'Foo.Init()'? – Johan

+0

Статические конструкторы вызывают первый раз, когда вы получаете доступ к статическим членам класса, вам не нужно называть это самим. –

0

что-то вроде этого:

private static Bar bar; 
public static Bar Bar 
{ 
    get 
    { 
     bar = bar ?? new Bar(); 
     return bar; 
    } 
} 
Смежные вопросы