Wyliczenia
pRoGi
Typ wyliczeniowy (ang. enumeration) jest bardzo ważnym typem danych na platformie .NET, wiele stałych w .NET Framework zdefinowanych jest jako wyliczenie. Klasa wyliczeniowa (Enum
), zdefiniowana jest w przestrzni nazw System
(System.Enum
) i wygląda następująco:
public abstract class Enum : IComparable, IFormattable,
IConvertible
Do utworzenia typu wyliczeniowego używamy słowa kluczowego Enum. Przykładowe wyliczenie może wyglądać następująco:
public enum Oceny
{
mierna = 2,
dostateczna,
dobra,
bardzo_dobra,
}
Ktoś może spytać dlaczego, zainicjowana została tylko pierwsza zmienna, otóż każde kolejne wyliczenie dostaje numer o jeden wyższy od poprzednika (domyślnie wyliczenie zaczyna się od 0). Wyliczenie może także być zdefiniowane następująco:
public enum Oceny
{
mierna,
dostateczna = 3,
dobra,
bardzo_dobra = 6,
}
W powyższym przypadku pierwszy element bedzie miał wartośc 0, drugi 3, trzeci 4 i ostatni 6.
Do wyliczenia można odwołać się na dwa sposoby. Jeżeli chcemy otrzymać nazwy elementów to musimy poprzedzić je nazwą typu wyliczeniowego:
Oceny.dobra; // zwróci łańcuch znaków "dobra"
W przypadku gdy chcemy otrzymać numer elementu to musi, powyższe odwołanie, rzutować na liczbę całkowitą, ponieważ elementy wyliczenia są zawsze typu całkowitego (domyślnie Int), wygląda to następująco:
(int) Oceny.dobra; // zwróci liczbę 4
Domyślnie elementy typu wyliczeniowego są typu całkowitego (Int) aczkolwiek w razie potrzeby możemy zawsze zmienić ten typ:
enum Foo : long { Min = -1000000000, Max = 100000000 };
Na elementach typu wyliczeniowego można operować używając operatorów bitowych:
using System;
namespace FooApp
{
[Flags]
enum Days { Pn, Wt, Śr, Czw, Pt, So, Nd };
class Program
{
static void Main(string[] args)
{
Days MyDays = Days.Nd | Days.So;
Console.WriteLine(MyDays);
Console.WriteLine((int)MyDays);
Console.Read();
}
}
}
W takim przypadku, na ekranie konsoli zostanie wyświetlone:
Wt, Nd
7
W razie usunięcia atrybutu [Flags]
, na ekranie konsoli wyświetlony zostanie następujący wynik:
Nie wiem czy ja się nie mylę ale chyba nie może być przecinków kończących w pierwszych dwóch enumach zdefiniowanych w niniejszym artykule... jeśli sie mylę to przepraszam.
Szerzej o wyliczeniach można poczytać tu: http://www.csharp.opiumsoft.pl/stale-wyliczeniowe-enum-w-net
O już widzę poprawione :p
Myślę, że ten kod w definicji "Zapamiętaj" () można by jakoś przerobić, tj. usunąć znacznik i zastąpić tekstem, bo nie idzie się aż tak domyślić (dopiero po spojrzeniu do źródła), czy ten kod jest w niej, a właściwie kiedy się ona kończy :)
Albo inaczej: dodać tam jaki tekst ;)