繁体   English   中英

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

[英]Is there only one instance of a static variable per process?

如果我有以下课程:

public class MyClass { public static int MyStaticInt = 0; }

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

默认情况下,静态状态是每个AppDomain的范围,如果使用ThreadStatic属性,则可以通过线程配置静态。

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

static可能意味着几件事情取决于上下文。

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

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

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

一个小小的警告是,当你有泛型类时,每个泛型类的实例都有一个变量实例。 即你有一个MyGenericClass实例和一个MyGenericClass实例。

编辑

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

,MyClass.MystaticInt只是MyClass类的本地。

主程序还加载了主程序 (第三方)和我的“ 自制 ”插件:我在“ 自定义 ”组件,这是从两个位置加载测试的静态实例。 我已经检查了AppDomain - 当从两个地方加载“ 自定义 ”程序集时它完全相同,唉,“ 自定义 ”程序集中的对象的静态实例是不一样的。 因此,我必须得出结论,静态实例每个加载程序集的每个AppDomain都有上述单个值,如果再次加载程序集,那么它将不相同。

class变量是静态的。 每个类加载器每个jvm只有一个类变量出现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM