C#在类外创建静态对象VS在类中创建它有什么区别?

时间:2011-06-23 23:25:47

标签: c#

我想了解下面3组代码段之间的区别:

private static FirstObject o = new FirstObject();
public class ClassA
{
}

//-----------------------------------------------------

public class ClassA
{
    private static FirstObject o = new FirstObject();
}

//-----------------------------------------------------

public class ClassA
{
    private static FirstObject o;

    public ClassA
    { 
        o = new FirstObject();
    }
}

请帮助我理解这些内容,内存,性能和用法。

谢谢。

3 个答案:

答案 0 :(得分:5)

  1. 无效,因为您无法在对象之外拥有变量

  2. 正确的方法 - 该类有一个静态成员,在第一次访问该类时初始化

  3. 非常糟糕,因为每次创建新对象时,都会重新创建静态对象。

答案 1 :(得分:1)

第一个选项不会编译。 C#中的静态变量必须限定为类或结构。

第二种选择是首选机制。

第三个选项是错误的,因为每次创建FirstObject的实例时都会创建一个新的ClassA,这几乎肯定是你想要的。

第四种选择是利用静态构造函数,例如,

public class ClassA
{
    private static FirstObject o;
    static ClassA
    {
        o = new FirstObject();
    }
}

如果FirstObject存在一些特殊的构造约束,则此选项很有用。但是,在此示例中,选择选项2而不是选项4.只需知道选项4存在。

答案 2 :(得分:-1)

以下三个案例......

  1. 假设在这里错过了一些外部构造的错误...“o”被声明,以便作为单个对象可以全局访问整个应用程序。它将具有一组通用的所有属性和数据。它可以通过“Namespace.o”
  2. 直接访问 声明
  3. “o”,以便它可以作为单个对象全局访问整个应用程序,但只能通过另一个定义的“ClassA”实例访问它。 ClassA的每个单独实例将具有相同的单个“o”对象,具有相同的属性和数据。
  4. 这对我来说不合适,我假设“ol”应该是“o;”。即使这样,代码看起来像缺少一些东西。如果行“o = new FirstObject”是正确的,则无法以这种方式访问​​它。