C# ve Enumeration (Enum) Kullanımı
Program yazarken
bir çok değişken tanımlar ve bu değişkenlere sayısal değer vererek
işlemimize başlarız. Ama bu yöntem çokta fazla sezgisel değildir.
Örnek;
Programımızda haftanın günlerini sunmak istediğimizi
düşünelim. Birde günlerle karmaşık işlemler yapacağımız düşünelim. Bunun
için her güne sayısal değer vermemiz yeterli olacaktır. Pazartesi, Salı,
Çarşamba, Perşembe, Cuma, Cumartesi, ve Pazar’a 0,1,2,3,4,5
ve 6 tam sayı değerlerini tanımlamamız yeterli olacak ve bu tamsayılar
üzerinden işlemlerimiz gerçekleşecektir. Ama sıfırı (0) kullandıktan ve bir
süre sonra kodumuza bakarken sıfırın Pazartesi’ni ifade ettiğini anlamak zor
olacaktır. Bu durumda C# güzel bir çözüm sunar ve değerlerin grup sembolik bir
adla bildirebileceğimiz enum anahtar sözcüğünü kullanırız.
Bir Enumeration türü
bildirmek
Enum
DaysOfTheWeek
{ Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday } |
Enumeration’a
erişmek
Yukarıda haftanın günlerini tanımlayan bir enumeration
tanımladık. Burdan sadece Cumartesi gününün değerini almak istersek,
DaysOfTheWeek day =
DaysOfTheWeek.Saturday;
MessageBox.Show(day.ToString()); |
Mesaj kutumuzda “6” yazacaktır.
Bu noktada size tüm değer türleri gibi, ? düzenleyici
kullanarak enumlandırma değişkeni boş değer alabileceğini hatırlatmak isterim.
Daha sonra enumda tanımlanmış bir değer atayabilir veya null değerde set
edilebilir.
Haftanın günlerinin hepsini birden almak istersek .GetNames() metodunu kullanırız. Bu
metod yardımıyla enum içerisinde kullandığımız değerleri string
formatında bir dizide kullanabiliriz.
Örnek;
string[]
days = Enum.GetNames(typeof(DaysOfTheWeek));
|
Bu kod yardımıyla artık days string dizisinde enumdaki
elemanlarımız var. İsterseniz bir tamsayı sabitini bir enum sabitiyle
ilişkilendirebilirsiniz.
Örnek;
enum
DaysOfTheWeek
{ Monday, Tuesday = 1, Wednesday = 3, Thursday, Friday, Saturday, Sunday } |
Birden çok numaralandırma kalıbına aynı değerde
verilebilir. Örneğin İngiltere’de Sonbahar için fall yerine Autumn
kullanılır. Bunu tanımlayan bir enum kalıbı tanımlayacak olursak şu şekilde
olur.
Enum
Season
{ Spring, Summer, Fall = Autumn, Winter } |
string[] days =
Enum.GetNames(typeof(DaysOfTheWeek));
|
Tekrar başa dönerek DaysOfTheWeek’te tanımladığımız haftanın günlerini combobox ile kullanıcıya seçtirmek istiyoruz. Bunun içinde haftanın günlerini combobox’ın içine atmamız gerekmekte bunun için şu kodu yazmamız yeterli olacaktır.
// İlk önce Get.Names(); metodunu kullanarak string bir
dizinin içerine günleri atıyorum
string[] days =
Enum.GetNames(typeof(DaysOfTheWeek));
|
// Daha sonra bu dizinin içerisinde dönerek her bir
string değeri combobox ın içerisine atıyorum.
foreach(string day in
days)
{ daysCombo.Item.Add(day); } |
Artık
daysCombo adındaki combobox’ta sırasıyla DayOfTheWeek’teki
sabitlerimiz eklenmiş durumda.
Birde şunu anlatmanın yararlı olacağını düşünüyorum. DaysOfTheWeek sabitlerinin içerisinde bir kontrol yaparak istediğimiz sabitin enum altında tanımlı olan bir sabit olup, olmadığını görmek için IsDefined(); metodunu kullanmamız yeterli olacaktır. Bu metod bool bir sonuç gönderir. Dikkat etmemiz gereken şey ise case sensitive çalışmasıdır.
Birde şunu anlatmanın yararlı olacağını düşünüyorum. DaysOfTheWeek sabitlerinin içerisinde bir kontrol yaparak istediğimiz sabitin enum altında tanımlı olan bir sabit olup, olmadığını görmek için IsDefined(); metodunu kullanmamız yeterli olacaktır. Bu metod bool bir sonuç gönderir. Dikkat etmemiz gereken şey ise case sensitive çalışmasıdır.
Örnek;
bool success =
Enum.IsDefined(typeof(DaysOfTheWeek), “Thursday”);
İf(success)
{ MessageBox.Show(“Found”); } else { MessageBox.Show(“Not Found”); } |
Bu örnek
bize Perşembe gününün haftanın günleri enumunda tanımlı olup olmadığını
göstericek eğer tanımlı ise IsDefined
metodundan true dönecek ve mesaj kutumuzda bulundu yazacak, yoksa false değer
döndürecek ve bulunamadı mesajı ile karşılaşacağız.
Eğer isDefined metodunda şunu yazmış olsaydık,
Enum.IsDefined(typeof(DaysOfTheWeek),
“THURSDAY”);
|
Bu bize false dönecekti. Dikkat
etmenizde yarar var.
Tebrik ederim. Başarılı buldum hocam...
YanıtlaSil