Pytanie Sprawdzone metody używania zmiennych globalnych w języku C # [zamknięte]


Ktoś kiedyś powiedział:

"zmienna globalna" jest tak naprawdę zmienną, którą tworzysz, by po prostu "trzymać trochę informacji", ponieważ twój model obiektowy jest słaby, a ty nie znalazłeś "prawdziwego celu", aby zmienna istniała. Zmienne globalne są prawie zawsze oznaką większej deformacji architektonicznej.

To może być prawda. Ale nie znam żadnego dobrego przykładu wielkiego i dobrego programu stworzonego bez zmiennych globalnych, a na pewno nie tak mało jak sugerowano powyżej. Zakres jest faktycznym kluczem. Możesz powiedzieć w programie z jedną klasą że są to jego parametry nie globalne vars. Ale oni są.

Tak czy inaczej...

Wciąż pojmuję koncepcję singel i, o ile mogę to stwierdzić, oni tak właściwie nie ma sensu w C #. Mam też wrażenie, że nie można uniknąć stanu globalnego, powinniśmy jednak unikać zwykłej publicznej klasy właściwości statyczne:

Więc jeśli nie jesteśmy singletonami ani klasą publiczną, co powinniśmy zrobić, aby mieć globalne vars w C #?

A kiedy mamy ich używać? Zakładając, że najprawdopodobniej nie da się ich uniknąć. Zawsze.

I dlaczego powinniśmy unikać używania a.? klasa statyczna lub static ogólnie? Jeśli tak jest w przypadku C #.

W jednym zdaniu: Jakie są najlepsze praktyki dotyczące używania zmiennych globalnych w Csharp?


12
2018-04-12 18:35


pochodzenie


Technicznie nie ma czegoś takiego jak zmienna globalna w języku C #, mogą one oczywiście być globalne dla klasy i upublicznione, zasadniczo osiągając to samo, ale z pewnym zasięgiem. - Ed S.
Dlaczego singletony nie mają sensu w C #? - Charlie Kilian
Chociaż jest dobrze napisane i poprawne, myślę, że to pytanie nie dotyczy tej witryny? - gbianchi
@gbianchi: Zgadzam się z tobą, ale ja bym to zrobił +100, gdybym mógł. Nie mogę się doczekać, aby zobaczyć, co elity stosu mają do powiedzenia na ten temat. - Daniel Szabo
Czy to nie dotyczy? programmers.stackexchange.com ? - emd


Odpowiedzi:


To wszystko kwestia kontekst.

Jeśli możesz określić otaczający zmienne, których potrzebujesz do obliczeń, możesz zawrzeć to obliczenie w większym kontekst gdzie te globalnie wyglądający zmienne mają węższy zakres do zamieszkiwania (są teraz lokalne w kontekście).

Jest to lepsze, ponieważ teraz możesz mieć wiele instancji swoich kontekst, które powinny działać niezależnie i nie ingerować w siebie nawzajem. Jest również nazywany a reentrant kontekst.


6
2018-04-12 18:40



Więc mówisz całość zmienna globalna koncepcja po prostu nie istnieje w języku C # i jeśli istnieje coś, co kopiuje zachowanie w języku C # (jak w przypadku singletonów), powinno nigdy być użytym? Jeśli to wszystko, czy mógłbyś podać przykład, aby zapisać wartość konfiguracji dla stałej, która będzie taka sama dla całej aplikacji? Załóżmy, że chcę mieć w jednym miejscu konfigurację wersji aplikacji i strony internetowej firmy. I trzeci rodzaj globalnego var, który nie jest stały, obecny język aplikacji. - cregox
Tak, one istnieją i od Ciebie zależy, czy je kontrolujesz, czy w inny sposób ograniczasz ich zakres. Wygląda na wersję aplikacji i stronę firmy metadane to powinno być ograniczone do zakresu montaż (z atrybutem składania); język aplikacji może zależeć od aktualnie zalogowanego użytkownika, więc może odnosić się do a żądanielub sesja zakres. Dostajesz obraz... - Jordão
Cóż, nic z tego nie brzmi dla mnie jak globalny var - ale wszystkie wydają się działać jak jeden. Myślę, że zrozumiałem to ... - cregox
Ilekroć masz takie rzeczy, zastanów się, co się stanie, jeśli masz wiele instancje zakresu w tym samym czasie. Wiele sesji użytkownika nie może na przykład dzielić tych samych ustawień językowych. - Jordão
Wiele instancji zakresu w tradycyjnym "globalnym systemie vars" nie wpłynęłoby na siebie nawzajem, chyba że jest to ten sam program, w którym uruchomiono wszystkie instancje - ponieważ tradycyjnie każda instancja byłaby kopiowaną pracą binarną. Ale to wszystko jest pożywieniem dla innego tematu. A ponieważ znowu przyniosłeś język, chciałbym tylko wspomnieć, że go nienawidzę, gdy program na moim komputerze ustawia język na podstawie żądania systemu operacyjnego lub sesji. Powinno to być ustawienie, w którym się wybieram. Wiele maszyn tutaj w Brazylii, system operacyjny jest w języku portugalskim, ale podoba mi się oprogramowanie, które uruchamiam, aby zawsze być w języku angielskim. - cregox