2009-07-29 2 views
17

В Java я могу написать:Что такое эквивалент C# static {...} в Java?

public class Foo { 

    public static Foo DEFAULT_FOO; 

    static { 
     DEFAULT_FOO = new Foo(); 
     // initialize 
     DEFAULT_FOO.init(); 
    } 

    public Foo() { 
    } 

    void init() { 
     // initialize 
    } 
} 

Как я могу получить тот же functionailty в C# (где статические члены инициализируются перед использованием)? И, если это плохо, чтобы попытаться сделать, что лучше?

ответ

33

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

public class Foo 
{ 
    static Foo() 
    { 
    // inits 
    } 
} 

Вот more info.

Итог: это конструктор без парамедиа с прикрепленным к нему ключевым словом static. Работает так же, как статический блок в Java.

Редактировать: Еще одно, что нужно упомянуть. Если вы просто хотите создать что-то статически, вы можете статически инициализировать переменную без необходимости создания статического конструктора. Например:

public class Foo 
{ 
    public static Bar StaticBar = new Bar(); 
} 

Имейте в виду, что вам нужен статический конструктор, если вы хотите, чтобы вызывать любые методы Бара во время статической инициализации, так что ваш пример, который вызывает Foo.Init() все еще нуждается в статический конструктор. Я просто говорю, что вы не ограничены, это все. :)

+0

Wow! Спасибо за невероятно быстрые ответы –

3

Static еще ключевое слово в C#:

public class Foo { 
    public static Foo DefaultFoo; 

    static Foo { 
     DefaultFoo = new Foo(); 
     // initialize 
     DefaultFoo.init(); 
    } 

    public Foo() { 
    } 

    void init() { 
     // initialize 
    } 
} 
Смежные вопросы