一个在库(DLL)中的静态变量是否被引用该库的所有进程所共享?

23

我知道在Web应用程序中使用的静态变量是共享的,对于整个Web应用程序的所有用户而言。如果我有一个使用一些静态私有变量的库(DLL),那么使用该库的所有应用程序是否共享该变量的值?

例如,假设我的DLL中有以下代码:

private static bool isConnected = false;

public static void Connect()
{
    // TODO: Connect.
    isConnected = true;
}

public static void Disconnect()
{
    // TODO: Disconnect.
    isConnected = false;
}
在应用程序A中,我调用myDLL.Connect(),它将isConnected的值设置为True。然后我有一些应用程序B也做同样的事情。如果应用程序A稍后调用myDLL.Disconnect(),那么应用程序B会将isConnected视为False吗?因为这两个应用程序共享具有静态变量的同一DLL文件。在这种情况下,DLL文件实际上是相同的文件,并且位于相同的文件路径中。

(我先前提出了一个类似的关于Web应用程序的问题 here. 但它与此无关。)

1个回答

28

不会的。它们被加载到不同的AppDomains中,无法看到彼此的实例。

即使它们引用相同的物理文件,每个应用程序都会获得自己的私有实例


这是否意味着如果X应用程序使用相同的DLL,则每个应用程序都会有一个程序集的X实例?只是确认一下。 - Rahul
4
简短回答-是。长回答:关键词在于“AppDomain”。如果有“X个AppDomains”,那么就会有“X”个实例。默认情况下,每个应用程序都会有自己的AppDomain,这意味着对于“X”个应用程序,就会有“X”个实例。虽然有一些方法可以在同一个域中加载多个应用程序,但那是另一个讨论的问题。 - Mrchief
1
谢谢,我不知道这个。+1 - Rahul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接