每个进程只有一个静态变量实例吗?

CJ7*_*CJ7 4 .net c# oop assemblies static-members

如果我有以下课程:

public class MyClass { public static int MyStaticInt = 0; }
Run Code Online (Sandbox Code Playgroud)

如果在一个解决方案中我MyNameSpace.MyClass.MyStaticInt在两个不同的程序集中引用,我指的是同一个变量吗?

Joã*_*elo 6

AppDomain默认情况下,静态状态为每个范围,如果使用该ThreadStatic属性,则可以按线程配置静态.

这意味着如果程序集在同一进程中运行且该进程只有一个应用程序域,则您的假设是有效的.


Chr*_*ter 5

static 根据具体情况,可能意味着几件事.

  • 默认情况下,您获得每个值的一个实例AppDomain.
  • 如果使用该ThreadStatic属性修饰,则每个线程获得一个值的实例.
  • 如果包含在泛型类中,则每个具体类型获得一个值的实例.

对于您的示例代码,第一个条件似乎是这种情况.在所有情况下,定义数据的特定程序集没有任何区别.


Slu*_*art 1

是的,每个类的每个进程只有一个实例。

对此需要注意的是,当您拥有泛型类时,每个泛型类实例都有一个变量实例。即,您将拥有一个 MyGenericClass 实例和一个 MyGenericClass 实例。

编辑

事实上,每个 AppDomain 都有一个实例,因此您可以通过自己创建 AppDomain 的多个副本来创建多个副本。