2013-07-04 2 views
4

Что различия между статическим конструктором как:Различия между статическим конструктором и оп ределяется статический экземпляр в мировом классе

class GlobalClass 
{ 

    public static DataBase dataBase; 

    static GlobalClass() 
    { 
     dataBase= new DataBase(@"Data Source=..;...; User ID=... ;Password=...;"); 
     dataBase.CreateConnection(); 
    } 
} 

И определенный статический экземпляр в мировом классе как следующее:

class GlobalClass 
{ 

    public static GlobalClass Globals = new GlobalClass(); 

    public DataBase dataBase; 

    public GlobalClass() 
    { 
     dataBase= new DataBase(@"Data Source=..;...; User ID=... ;Password=...;"); 
     dataBase.CreateConnection(); 
    } 
} 

Что есть различия между каждым типом? И что лучше использовать?

+0

ли вы на самом деле имели в виду, чтобы спросить о разнице между инициализацией статического полем в линии в точке объявления, а также инициализации статического поля внутри статического конструктора? –

ответ

3

В первом случае база данных инициализировалась только один раз, когда GlobalClass получил доступ в первый раз.

Во втором случае база данных инициализируется каждый раз при создании GlobalClass экземпляра. Нет экземпляров - никаких инициализаций. Два экземпляра - две инициализации (только последняя из них будет доступна через поле dataBase).

+0

даже во втором случае я могу получить доступ к базе данных и инициализировать его без создания экземпляров GlopalClass ... Итак, я не вижу разницы между двумя случаями. –

+1

@werwerwer Я вижу, это из-за статического поля 'public static GlobalClass Globals = new GlobalClass();' который создает новый экземпляр класса, но каждый раз, когда вы создаете новый экземпляр 'GlobalClass', вы снова инициализируете базу данных –

+0

mmmmm, И в первом случае по умолчанию я не могу создать экземплярную форму «GlobalClass()», поэтому я буду инициализировать базу данных только один раз. это верно?? –

1

Хотя первоначально аналогичные функции не то же самое.

Вторая версия представляет собой реализацию шаблона Singleton, более гибкая из двух.

Главное преимущество заключается в том, что Globals назначается, его можно переназначить. Одно использование - это то, где у вас есть несколько подтипов GlobalClass, вы можете назначить экземпляр соответствующего подтипа для данного контекста.

Вы можете прочитать больше о Синглтоне против статических здесь: Difference between static class and singleton pattern?

 Смежные вопросы

  • Нет связанных вопросов^_^