Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 静态类是否创建实例?msdn说我没有';t、 但是为什么呢?_C#_.net_Static_Singleton - Fatal编程技术网

C# 静态类是否创建实例?msdn说我没有';t、 但是为什么呢?

C# 静态类是否创建实例?msdn说我没有';t、 但是为什么呢?,c#,.net,static,singleton,C#,.net,Static,Singleton,我是在试图理解单例对象和静态类之间的区别时遇到的 我到处都能看到的最简单的信息是,静态类不创建实例,而singleton需要创建实例 但是为什么我可以从静态类得到静态构造函数呢?这是什么意思?它不创建一个实例吗 如果在静态类构造函数上运行带有断点的简单代码,您将看到它到达了断点 我很困惑,有人吗 但是为什么我可以从静态类中得到静态构造函数呢?这是什么意思?它不创建一个实例吗 不可以。静态构造函数允许您初始化类的静态成员(基本上是该类的静态状态) 对于单例模式,静态构造函数(或静态内联初始值设定项

我是在试图理解单例对象和静态类之间的区别时遇到的

我到处都能看到的最简单的信息是,静态类不创建实例,而singleton需要创建实例

但是为什么我可以从静态类得到静态构造函数呢?这是什么意思?它不创建一个实例吗

如果在静态类构造函数上运行带有断点的简单代码,您将看到它到达了断点

我很困惑,有人吗

但是为什么我可以从静态类中得到静态构造函数呢?这是什么意思?它不创建一个实例吗

不可以。静态构造函数允许您初始化类的静态成员(基本上是该类的静态状态)

对于单例模式,静态构造函数(或静态内联初始值设定项)通常会创建一个实例,但该实例仍然是通过普通的非静态构造函数创建的。然后将其存储在静态变量(单个“实例”变量)中

惰性初始化的单例将避免这种情况,并根据需要初始化静态变量

A是另一回事——静态类永远不会作为单例工作,因为您不能创建静态类的实例。静态类专门用于永远不会创建实例的情况


单例将(通常)通过使用非静态类创建,但使用私有构造函数(因此只能在该类中创建实例)。将有一个静态属性用于检索该类的单个实例。类实例可以根据需要创建,也可以在静态构造函数中创建。

静态构造函数只是一个可以初始化静态成员变量的地方。您不需要静态构造函数-您可以内联初始化静态成员变量,但我认为将它们放入静态构造函数更为整洁

请记住,即使您没有实例化静态类,您也会实例化它的静态成员,并且有一个地方可以这样做是很好的。这是对C++中的方式的改进。


请注意,类不需要是静态的,就可以拥有静态构造函数。您可以有一个提供普通构造函数和静态构造函数的非静态类。同样的规则也适用。

非静态类也可以有静态构造函数。主要的一点是,它只运行一次,您不需要说何时或如何运行。但这仍然留下了静态字段存储在何处的问题。@ThePoet-在堆上,它们需要在某些内容中。就像在一个实例中一样。@Henkholtman,这不是问题的一部分,据我所知…?@ReedCopsey-不,这是我对标题的第一次解释。但不是OP想要的。