Подтвердить что ты не робот

Является ли статическая переменная в библиотеке (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, которое делает то же самое. Если приложение А позже вызывает myDLL.Disconnect(), приложение B видит isConnected как False, потому что два приложения имеют один и тот же DLL файл со статической переменной? DLL файл в этом случае был бы буквально одним и тем же файлом в том же пути к файлу.

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

4b9b3361

Ответ 1

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

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