Является ли статическая переменная в библиотеке (DLL) общей для всех процессов, ссылающихся на эту библиотеку? - PullRequest
21 голосов
/ 25 июля 2011

Я знаю, что статическая переменная, используемая в веб-приложении, является общей для всех пользователей веб-приложения.Если у меня есть библиотека (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 в этом случае будет буквально одним и тем же файлом с тем же путем к файлу.

(ранее я задавал несколько похожий вопрос о веб-приложениях здесь. Он не связан.)

1 Ответ

26 голосов
/ 25 июля 2011

Нет, они не будут.Они загружаются в отдельные AppDomains и не могут видеть экземпляры друг друга.

Даже если они ссылаются на один и тот же физический файл, каждое приложение получает свой собственный частный экземпляр сборки.

...