6

如果我有以下课程:

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

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

4

6 回答 6

6

默认情况下,静态状态的范围是 per ,如果您使用该属性AppDomain,则可以将其配置为按线程。ThreadStatic

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

于 2012-10-09T08:51:21.657 回答
5

static根据上下文可能意味着几件事。

  • 默认情况下,您会获得一个 per 值的实例AppDomain
  • 如果使用该属性进行装饰,则ThreadStatic每个线程都会获得一个值的实例。
  • 如果包含在泛型类中,您将获得每个具体类型的值的一个实例。

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

于 2012-10-09T08:54:10.363 回答
1

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

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

编辑

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

于 2012-10-09T08:51:08.600 回答
0

, MyClass.MystaticInt 仅对 MyClass 类是本地的。

于 2012-10-09T08:53:26.773 回答
0

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

于 2015-09-03T05:21:42.357 回答
0

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

于 2017-07-02T06:53:27.690 回答