Programowanie w języku C#

Wyliczenia

  • 2006-06-18 11:06
  • 3 komentarze
  • 6359 odsłon
  • Oceń ten tekst jako pierwszy
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:


7
7

3 komentarze

Coldpeer 2006-03-17 14:44

O już widzę poprawione :p

Coldpeer 2006-03-16 19:49

Myślę, że ten kod w definicji "Zapamiętaj" (<dfn>) można by jakoś przerobić, tj. usunąć znacznik <dfn> 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 ;)