静态构造函数和全局类中的defind静态实例之间的差异

时间:2013-07-04 13:18:10

标签: c# .net static global static-constructor

静态构造函数之间的区别如下:

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();
    }
}

每种类型之间有什么区别?哪个更好用?

2 个答案:

答案 0 :(得分:3)

在第一种情况下,数据库仅初始化一次,第一次访问GlobalClass时。

在第二种情况下,数据库在您创建GlobalClass实例时初始化每次。没有实例 - 没有初始化。两个实例 - 两个初始化(只有最后一个将通过dataBase字段提供)。

答案 1 :(得分:1)

虽然最初在功能上相似但它们并不相同。

第二个版本是Singleton模式的一个实现,是两者中更灵活的。

最大的优势是,Globals可分配,因此可以重新分配。一种用法是您拥有GlobalClass的多个子类型,您可以为给定的上下文分配适当子类型的实例。

您可以在此处详细了解Singleton与static:Difference between static class and singleton pattern?