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#中的静态变量的作用域必须是类或结构。
第二种选择是首选机制。
第三个选项是错误的,因为每次创建ClassA
的实例时都会创建一个新的FirstObject
,这几乎可以肯定不是您想要的。
第四种选择是利用静态构造函数,例如
public class ClassA
{
private static FirstObject o;
static ClassA
{
o = new FirstObject();
}
}
如果FirstObject
有一些特殊的构造约束,则此选项非常有用。不过,在本例中,选择选项2而不是选项4。只要知道选项4是存在的。
以下三种情况。。。
- 假设这里的拼写错误缺少一些外部结构。。。声明"o"是为了使整个应用程序可以作为单个对象全局访问它。它将有一个所有属性和数据的公共集合。它可以通过"Namespace.o"直接访问
- 声明"o"是为了使它可以作为单个对象全局访问整个应用程序,但它只能通过另一个定义的"ClassA"实例访问。ClassA的每个单独实例都将具有相同的、具有相同属性和数据的单个"o"对象
- 这在我看来不太正确,我假设"ol"应该是"o;"。即便如此,代码看起来还是缺少了一些东西。如果行"o=new FirstObject"是正确的,则不能以这种方式访问它