2011-07-25 9 views
20

Wiem, że zmienna statyczna używana w aplikacji internetowej jest udostępniana wszystkim użytkownikom w aplikacji internetowej. Jeśli mam bibliotekę (DLL), która używa pewnej statycznej zmiennej prywatnej, czy wszystkie aplikacje korzystające z tej biblioteki dzielą wartość tej zmiennej?Czy zmienna statyczna w bibliotece (DLL) jest współdzielona przez wszystkie procesy odwołujące się do tej biblioteki?

Załóżmy, że mam następujący kod w moim DLL:

private static bool isConnected = false; 

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

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

Następnie w zgłoszeniu A, wzywam myDLL.Connect() który ustawia wartość isConnected do True. Potem mam aplikację B, która robi to samo. Jeśli aplikacja A później wywołuje myDLL.Disconnect(), czy aplikacja B widzi isConnected jako False, ponieważ te dwie aplikacje korzystają z tego samego pliku DLL ze zmienną statyczną? Plik DLL w tym przypadku byłby dosłownie tym samym plikiem w tej samej ścieżce pliku.

(I wcześniej zadał podobne pytanie nieco o aplikacjach internetowych here. To nie jest związane.)

+0

+1 interesujące pytanie – Rahul

Odpowiedz

22

No nie będzie. Są one ładowane w oddzielnym AppDomains i nie widzą nawzajem swoich wystąpień.

Nawet jeśli odnoszą się do tego samego pliku fizycznego, każda aplikacja otrzymuje własną instancję z instancji prywatnej.

+0

czy to oznacza, że ​​jeśli aplikacja X używa tej samej biblioteki DLL, wówczas wystąpiłoby X wystąpień złożenia dla każdej aplikacji? tylko raz potwierdzam. – Rahul

+3

Krótka odpowiedź - Tak. Long Answer: Słowo kluczowe to "AppDomain". Jeśli istnieje "X AppDomains", wówczas wystąpią instancje "X". Domyślnie każda aplikacja będzie miała swoją własną AppDomain, co oznacza, że ​​dla aplikacji "X" pojawią się instancje "X". Istnieją sposoby na załadowanie wielu aplikacji w tej samej domenie, ale to inna dyskusja. – Mrchief

+1

Dzięki, nie wiedziałem o tym. +1 za to – Rahul

Powiązane problemy