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

Я знаю, что статическая переменная, используемая в веб-приложении, является общей для всех пользователей веб-приложения. Если у меня есть библиотека (DLL), которая использует некоторую статическую частную переменную, все ли приложения, использующие эту библиотеку, разделяют значение этой переменной?

Например, скажем, у меня есть следующий код в моей DLL:

private static bool isConnected = false;

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

public static void Disconnect()
{
    // TODO: Disconnect.
    isConnected = false;
}

Затем в приложении А я звоню myDLL.Connect() который устанавливает значение isConnected в True, Тогда у меня есть приложение B, которое делает то же самое. Если приложение А позже звонит myDLL.Disconnect()Видит ли приложение B isConnected как False потому что два приложения совместно используют один и тот же файл DLL со статической переменной? Файл DLL в этом случае будет буквально одним и тем же файлом с тем же путем к файлу.

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

1 ответ

Решение

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

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

Другие вопросы по тегам