Jason. Cała informatyka w jednym miejscu!

W ferworze tego wszystkiego zapomniałem napisać o jeszcze jednym typie danych, który został wspomniany co najmniej jeden raz w całej reszcie artykułów o C# jakie się przewinęły :O. Szybko nadrabiam zaległości, teraz będzie o typie wyliczeniowym jako "enum" w języku C#!

KIEDY WIDZISZ "ENUM" W JĘZYKU C#, TO JEST TO TYP WYLICZENIOWY

Typ wyliczeniowy znany jest od istnienia języka C, więc nie znajdziecie go wyłącznie w "CSharpie". Chodzi o dosłowny "kontener" wielu stałych w jednym miejscu, a każda z nich posiada liczbowy identyfikator. Nie może posiadać w sobie żadnych metod ani właściwości!

STRUKTURA TYPU WYLICZENIOWEGO

Spójrzmy od razu na budowę takiego "enum'a":

enum Direction
{
	North, South, East, West
}

Po słowie kluczowym "enum" w języku C# od razu wprowadza się nazwę (konwencja nazewnicza twierdzi tyle, że powinno się zaczynać wielką literą, a sama nazwa być rzeczownikiem w liczbie pojedynczej), a pod spodem para klamerek. W środku nich definiujemy sobie pisane ręcznie nazwy stałych, które będą reprezentować jakiś element dotyczący tego "kontenera". Wymienia się je po przecinku, jak argumenty w matematyce.

Na górze pokazałem przykład z kierunkami świata. Występuje północ, południe, wschód i zachód, więc nie pozostaje nic innego jak wprowadzić anglojęzyczne odpowiedniki i wtedy od razu wiadomo o co chodzi :).

PRZYKŁAD KODU ŹRÓDŁOWEGO

W celu skorzystania z enumeracji ("enum" w języku C# może być określany również w ten sposób), wymagana jest instancja typu wyliczeniowego. Oto bardzo prosty przykład zastosowania w praktyce, razem z definicją "enum'a":

using System;

class Program
{
	enum Direction
	{
		North, South, East, West
	}
	
	static void Main(string[] args)
	{
		Direction direction = Direction.East;
		
		Console.WriteLine(direction);
	}
}

Wewnątrz metody "Main" umieszczona została instancja typu wyliczeniowego. Pierwsza część przed operatorem przypisania jest taka sama przy podejściu do klasy. Natomiast druga część jest już nietypowa. Nie korzystamy z konstruktora, bo takim nie dysponuje "enum" w języku C#. Zamiast tego, przypisujemy jedną z naszych stałych ale co ważne, łącznie z przedrostkiem o tej samej nazwie! Nie podstawiamy samego klucza, bo będzie błąd kompilacji. Kiedy chodzi nam o przypisanie jednej ze stałych, to zawsze razem z przedrostkiem określającym etykietę typu "enum".

Na końcu zostawiłem wywołanie "Console.WriteLine", aby pokazać Wam że raz, taka możliwość istnieje, a dwa, nie będzie żadnych bzdur na wyjściu. Ukaże się nazwa stałej (ale już bez przedrostka!).

RZUTOWANIE STAŁEJ NA TYP LICZBOWY

A teraz szczegóły. "enum" w języku C# domyślnie utożsamia się z nazwą stałej. Nie bez kozery pozostawiłem instrukcję wypisującą na strumień wyjściowy. Dodając jeden malutki szczegół:

Console.WriteLine((int)direction);

macie prawo zastosować rzutowanie typu wyliczeniowego na typ "int" (nie zawsze akurat na "int", szczegóły w dalszej części), dzięki czemu możecie później wartość liczbową wykorzystać do wszelakich celów.

DOMYŚLNIE REPREZENTUJĘ TYP "INT", ALE W KAŻDEJ CHWILI MOŻESZ GO ZMIENIĆ!

Typ wyliczeniowy, jeżeli nie posiada ręcznie zdefiniowanego typu danych, domyślnie przyjmuje wartość "int". Podając nazwę pożądanego typu danych zaraz za wstawionym dwukropkiem po nazwie typu wyliczeniowego:

enum Direction : byte {...}

możecie zmienić typ danych wartości jakie mają przyjmować poszczególne klucze. Dozwolone są jednak tylko wszystkie typy całkowitoliczbowe, więc zapomnijcie np. o "double"! Pamiętajcie też o przestrzeganiu zakresów danych podczas przypisywania wartości! Kompilator będzie Was bacznie obserwować!

PRZYPISYWANIE NIESTANDARDOWYCH WARTOŚCI DLA STAŁYCH

Kolejna ciekawostka odnośnie samych stałych. Każdy klucz jaki wprowadzicie, posiada własną reprezentację liczbową. Domyślnie liczona jest od zera, zatem podstawiając do naszego przykładu z kierunkami świata:

enum Direction
{
	North, South, East, West
}

stałe przyjmą wartości kolejno: 0, 1, 2, 3. "enum" w języku C# pozwala na swobodną edycję zgodnie z typem danych przystosowanym do tego "enum'a". Dla przykładu:

enum Direction
{
	North = 30,
	South = 32,
	East = 34,
	West = 36
}

Wystarczy pomiędzy nazwą a przecinkiem, wstawić operator przypisania razem z wartością o odpowiednim typie danych. Co może to Wam dać? A pamiętacie powyższy podpunkt z rzutowaniem :D? To już wiecie. Tak, zostanie zwrócona ta liczba, która została przypisana.

Jest także możliwość podstawienia wartości tylko do niektórych stałych:

enum Direction
{
	North = 30,
	South,
	East = 34,
	West
}

Co wtedy? Wszystkie niezdefiniowane będą miały inkrementowany numer, pisząc najkrócej. "South" przyjmie numer 31, a "West" 35.

Typ wyliczeniowy "enum" w języku C#

"enum" to typ wyliczeniowy mający zdolność do przechowywania wielu stałych dotyczących jakiegoś określonego kryterium, bądź kategorii. BARDZO przydatne podczas uzależniania zachowania programu od konkretnej stałej w instrukcjach warunkowych i wielokrotnego wyboru.


Typ wyliczeniowy "enum" w języku C# jest naprawdę bardzo prosty w obsłudze (jak również w rozbudowywaniu) i powinien być często używany w przypadkach, kiedy można parę wartości upchnąć do jednego "kontenera". Pomaga to w czytaniu kodu i zwiększa bezpieczeństwo podczas programowania "switch'y" i instrukcji warunkowych ;).

PODOBNE ARTYKUŁY