/ / Global Variables Bad - c #

Global Variables Bad - c #

Ok po przeczytaniu tego artykułu, a także niektórych przykładów, wciąż nie wiem, co oznaczają zmienne globalne. Więc powiedzmy, że prywatne zmienne w twojej klasie są globalne?

http://www.c2.com/cgi/wiki?GlobalVariablesAreBad

Czy ktoś może mi to wyjaśnić prostymi słowamikontekst. Czy to oznacza nawet prywatne pola na szczycie twojej klasy? Nie mam jasności co do definicji „zmiennej globalnej”, dzięki czemu mogę odróżnić, czy robię coś „złego” w swoich klasach.

Odpowiedzi:

11 dla odpowiedzi nr 1

W C # przykładem zmiennej globalnej byłaby publiczna zmienna statyczna w klasie publicznej. Cały program mógłby do niego czytać / zapisywać, a także byłby dzielony między wątkami.


5 dla odpowiedzi nr 2

Prywatne pole w twojej klasie byłoby ogólnie nazywane „zmienną poziomu klasy”. Aplikacja nie jest globalna, ponieważ dostęp do niej ma tylko Twoja klasa.

Zmienna globalna jest zmienną, do której każdy program może uzyskać dostęp bez względu na zakres.

Przykładem zmiennej globalnej byłoby coś w rodzaju Application obiekt w ASP.Net (publiczna statyczna instancja klasy HttpApplication). Każdy obiekt, w dowolnym momencie, w dowolnym pliku z kodem, może mieć dostęp do Application obiekt, aby wyszukać tę wartość. Ogólnie, przechowywanie wartości w Application obiekt jest złym pomysłem, chyba że naprawdę wiesz, co robisz, z powodów wymienionych w artykule, który powiązałeś.


2 dla odpowiedzi nr 3

Nie. Zmienne globalne to zmienne dostępne dla całego programu. Prywatne zmienne członkowskie są w rzeczywistości przeciwieństwem zmiennych globalnych. W C / C ++ zmienna globalna byłaby taka, która jest zadeklarowana poza funkcją lub deklaracją klasy. W C ++ i Java publiczna zmienna statyczna, która nie jest stała, byłaby również uważana za zmienną globalną, ponieważ cały program może do niej uzyskać dostęp.


0 dla odpowiedzi nr 4

W C # naprawdę nie ma niczego, co można by nazwać zmienną „globalną”, najbliższa byłaby publiczna zmienna statyczna, coś, co jest dostępne dla wszystkich części programu w dowolnym momencie.


0 dla odpowiedzi № 5

Zasadniczo istnieją inne mechanizmy, które mogą prowadzić do wprowadzenia zmiennych globalnych:

  • AppDomain.GetData / AppDomain.SetData pair - Pobiera / Ustawia wartość przechowywaną w bieżącej domenie aplikacji dla określonej nazwy, która jest dostępna z innych domen aplikacji.
  • Thread.GetData / SetData pair - Pobiera / Ustawia wartość z określonego gniazda w bieżącym wątku w bieżącej domenie bieżącego wątku.

Jak wynika z artykułu, lepiej ich unikać.


0 dla odpowiedzi № 6

Myślę, że Varialbes zdefiniowano na szczycie klasyz „DIM” nadal jest zakresem klas, a nie globalnym, ale jeśli zdefiniowano je jako „PUBLIC” na górze klasy lub „PUBLIC” w „MODULE”, mogą być „GLOBALNE”, DOBRY dostęp do tych zmiennych z rozwiązania ALL BAD, pozostaną w PAMIĘCI ..