W Javie możliwe jest umieszczenie metod wewnątrz wyliczenia.
Czy w C # jest taka możliwość, czy jest to tylko zbiór ciągów i to wszystko?
Próbowałem zastąpić, ToString()
ale to się nie kompiluje. Czy ktoś ma prosty przykład kodu?
c#
enums
enumeration
Eya
źródło
źródło
Odpowiedzi:
Możesz pisać metody rozszerzające dla typów wyliczeniowych:
źródło
Możesz napisać metodę rozszerzenia dla swojego wyliczenia:
Instrukcje: tworzenie nowej metody wyliczenia (przewodnik programowania w języku C #)
źródło
Inną opcją jest użycie klasy wyliczenia stworzonej przez Jimmy'ego Bogarda .
Zasadniczo musisz stworzyć klasę, która dziedziczy po jego
Enumeration
. Przykład:Następnie możesz użyć go jak wyliczenia, z możliwością umieszczenia w nim metod (między innymi):
Możesz go pobrać za pomocą NuGet .
Chociaż ta implementacja nie jest natywna w języku, składnia (konstrukcja i użycie) jest bardzo zbliżona do języków, które implementują wyliczenia natywnie lepiej niż C # ( na przykład Kotlin ).
źródło
Nie. Możesz utworzyć klasę, a następnie dodać kilka właściwości do klasy, aby w pewnym stopniu emulować wyliczenie, ale to nie to samo .
Lepszym wzorcem byłoby umieszczenie metod w klasie innej niż emum.
źródło
Ponieważ natknąłem się i potrzebowałem dokładnego przeciwieństwa wyliczenia do ciągu, oto rozwiązanie ogólne:
To również ignoruje wielkość liter i jest bardzo przydatne do analizowania odpowiedzi REST w wyliczeniu, aby uzyskać większe bezpieczeństwo typów. Mam nadzieję, że to komuś pomoże
źródło
C # nie zezwala na używanie metod w modułach wyliczających, ponieważ nie jest to zasada oparta na klasach, ale raczej dwuwymiarowa tablica z ciągiem i wartością.
Microsoft zdecydowanie odradza używanie klas w tym przypadku, zamiast tego użyj (data) struct (ures); STRUCT jest lekką klasą dla danych i ich procedur obsługi i może dobrze obsługiwać funkcje. C # i jego kompilator nie mają możliwości śledzenia i wydajności, jakie znamy z JAVA, gdzie im więcej razy dana klasa / metoda jest używana, tym szybciej działa i jej użycie staje się „oczekiwane”. C # po prostu tego nie ma, więc aby odróżnić, użyj STRUCT zamiast CLASS.
źródło