Słowo static
kluczowe członka w wielu językach oznacza, że nie powinieneś tworzyć instancji tej klasy, aby mieć dostęp do tego członka. Nie widzę jednak żadnego uzasadnienia, aby stworzyć całą klasę static
. Dlaczego i kiedy powinienem zrobić zajęcia static
?
Jakie korzyści czerpię z tworzenia zajęć static
? Mam na myśli, że po zadeklarowaniu klasy statycznej nadal należy zadeklarować wszystkich członków, do których chce mieć dostęp bez instancji, jako statyczne.
Oznacza to, że na przykład Math
klasa może zostać zadeklarowana jako normalna (nie statyczna), bez wpływu na sposób programowania programistów. Innymi słowy, uczynienie klasy statyczną lub normalną jest dla programistów trochę przejrzyste.
c#
class
static-keyword
Saeed Neamati
źródło
źródło
Odpowiedzi:
Ułatwia użytkownikom zrozumienie sposobu wykorzystania klasy. Na przykład kompletnym nonsensem byłoby napisanie następującego kodu:
C # nie musi tego zabraniać, ale ponieważ nie służy to żadnemu celowi, równie dobrze może powiedzieć o tym użytkownikowi. Niektóre osoby (w tym ja) wyznają filozofię, zgodnie z którą języki programowania (i interfejsy API…) powinny być tak restrykcyjne, jak to tylko możliwe, aby uczynić je trudnymi w użyciu: jedynymi dozwolonymi operacjami są wtedy te, które są znaczące i (mam nadzieję) prawidłowe.
źródło
sealed
na pierwszym miejscu. Przyznaję, że nie wszyscy ludzie zgadzają się z tym sentymentem, ale komentarze nie są dobrym miejscem do dyskusji na ten temat. Ale w przypadkustatic
tego problemu nawet się nie stawia: tworzenie instancji nigdy nieSystem.Math
będzie miało sensu.Math
klasy jako statyczną bez deklarowaniaMath
klasy jako statyczną, nadal możesz jej używać bez potrzeby tworzenia instancji.static
.new Math()
.StackOverflow ma świetną dyskusję na ten temat . Dla ułatwienia skopiuję go i wkleję tutaj, w imieniu jego autora, Mark S. Rasmussen :
źródło
Dziwię się, że nikt inny nie wspomniał, że
static
klasy zezwalają na metody rozszerzania - bezpiecznie rozszerzając istniejący typ (w tym dodając definicje metod do interfejsów ), których nie posiadasz. Na przykład, czym jest Scalamożna wyrazić w C # jako
źródło
Dla mnie klasa statyczna (w języku C #) przypomina trochę wywoływanie funkcji.
Na przykład
Podaję sznurek i odzyskuję sznurek. Wszystko jest zawarte w tej metodzie. Brak dostępu do zmiennej członka itp.
Szczerze mówiąc, przede wszystkim jego zastosowanie polegało na zmniejszeniu linii kodu:
Dlaczego:
Kiedy mogę to zrobić:
Tak więc używałbym klas statycznych w tych przypadkach, gdy chciałem coś zrobić bez potrzeby klasy i oznaczałoby to mniej pisania.
Punkty Mark S. są poprawne, ale dla mnie, jeśli mam jakieś metody użyteczności, łatwiej udawać, że wywołuję funkcję, aby odwoływać się do nich jako jednej linijki.
To może być uproszczone, ale głównie tak wykorzystałem
static
.źródło