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

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

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


person Devin Burke    schedule 25.07.2011    source источник


Ответы (1)


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

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

person Mrchief    schedule 25.07.2011
comment
означает ли это, что если X-приложение использует одну и ту же DLL, тогда будет X экземпляров сборки по одному для каждого APP? просто подтверждаю один раз. - person Rahul; 25.07.2011
comment
Краткий ответ - Да. Длинный ответ: здесь ключевое слово AppDomain. Если есть X AppDomains, то будет X экземпляров. По умолчанию каждое приложение будет иметь свой собственный домен приложения, что означает, что для X приложений будет X экземпляров. Есть способы, с помощью которых вы можете загружать несколько приложений в одном домене, но это другой разговор. - person Mrchief; 25.07.2011
comment
Спасибо, не знал этого. +1 за это - person Rahul; 25.07.2011