静态类的范围是什么?

时间:2008-11-12 16:25:58

标签: c# static biztalk applicationdomain

我有一个可以一次由多个进程使用的程序集。如果我使用静态类,多个进程是否都使用该类的相同“实例”?

由于进程是分开的,它们是否会在不同的应用程序域下运行,因此静态“实例”是否分开?

这里的细节中的布丁是一个自定义BizTalk适配器正在使用该程序集,我将其设置为以并行批处理方式处理消息。这就是我所说的“多个过程”。

5 个答案:

答案 0 :(得分:13)

每个应用程序域都存在一次静态类。在您的情况下,它将取决于适配器是否在同一应用程序域中使用多个线程(因此共享静态类的单个实例)或使用多个进程(因此具有静态类的单独实例)。

答案 1 :(得分:10)

多个线程将共享一个实例。因此,静态类可以方便地在线程之间传递状态,但是您需要非常小心,不要引入竞争条件(Monitorlock您的属性)。

但是,多个进程应位于单独的AppDomain中,因此每个进程都有自己的实例。

答案 2 :(得分:6)

“我有一个可能一次被多个进程使用的程序集。如果我使用静态类,那么多个进程是否都使用该类的相同”实例“?” EM>

不,他们都有不同的实例。

“由于进程是分开的,它们是否会在不同的应用程序域下运行,因此将静态”实例“分开?”

答案 3 :(得分:2)

静态类的范围仅限于应用程序域。每个app域都有自己的静态变量副本。如果您的“进程”是同一应用程序域中的线程,那么它们将共享静态值。但如果它们是实际单独的Windows进程,那么它们将具有不同的应用程序域,因此具有单独的副本。

答案 4 :(得分:2)

您可能想要查看Singleton模式。要点似乎是要控制服务实例的数量。

我猜你想要一个单独的dll /项目服务所有客户端请求。您可以使用static class / singleton / multiton来实现所需的功能。这实际上取决于你想要完成的事情。