2014-10-13 3 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(); 
} 

Foo.Init()을 실행하기 전에 Bar 필드가 인스턴스화되기 때문에 작동하지 않습니다. 내가 생각할 수있는

유일한 해결책은

public static class Bars 
{ 
    public static Bar bar; 
    public static void Init() 
    { 
     bar = new Bar(); 
    } 

} 

같은과 Foo.Init()Bars.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; 
    } 
}