C#在类外创建静态对象和在类内创建静态对象有什么区别

本文关键字:对象 创建 静态 什么 区别 | 更新日期: 2023-09-27 18:00:06

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

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

请帮助我了解这些功能的范围、内存、性能和用法。

谢谢。

C#在类外创建静态对象和在类内创建静态对象有什么区别

  1. 无效,因为在对象之外不能有变量

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

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

第一个选项不会编译。C#中的静态变量的作用域必须是类或结构。

第二种选择是首选机制。

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

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

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

如果FirstObject有一些特殊的构造约束,则此选项非常有用。不过,在本例中,选择选项2而不是选项4。只要知道选项4是存在的。

以下三种情况。。。

  1. 假设这里的拼写错误缺少一些外部结构。。。声明"o"是为了使整个应用程序可以作为单个对象全局访问它。它将有一个所有属性和数据的公共集合。它可以通过"Namespace.o"直接访问
  2. 声明"o"是为了使它可以作为单个对象全局访问整个应用程序,但它只能通过另一个定义的"ClassA"实例访问。ClassA的每个单独实例都将具有相同的、具有相同属性和数据的单个"o"对象
  3. 这在我看来不太正确,我假设"ol"应该是"o;"。即便如此,代码看起来还是缺少了一些东西。如果行"o=new FirstObject"是正确的,则不能以这种方式访问它