Enumerators
İçindekiler
Bugünkü makalemizde, kendi değer türlerimizi oluşturmanın yollarından birisi olan Enumerator’ları inceleyeceğiz. C# dilinde veri depolamak için kullanabileceğimiz temel veri türleri yanında kendi tanımlayabileceğimiz türler de vardır. Bunlar Structs (Yapılar), Arrays (Diziler) ve Enumerators (Numaralandırıcılar)’dır. Numaralandırıcılar, sınırlı sayıda değer içeren değişkenler yaratmamıza olanak sağlarlar. Burada bahsi geçen değişken değerleri bir grup oluştururlar ve sembolik bir adla temsil edilirler. Numaralandırıcıları kullanma nedenlerimizden birisi, verilere anlamlar yükleyerek program içerisinde kolay okunabilmelerini ve anlaşılabilmelerini sağlamaktır. Örneklerimizde bu konuyu çok daha iyi anlayacaksınız. Bir Numaralandırıcı tanımlamak için aşağıdaki syntax kullanılır.
Kapsam belirteçleri
enum numaralandırıcıAdi
{
birinciUye,
ikinciUye,
ucuncuUye,
}
Kapsam belirteçleri protected, public, private, internal ya da new değerini alır ve numaralandırıcının yaşayacağı kapsamı belirtir. Dikkat edilecek olursa, elemanlara herhangi bir değer ataması yapılmamıştır. Nitekim Numaralandırıcıların özelliği budur. İlk eleman 0 değerine sahip olmak üzere diğer elemanlar 1 ve 2 değerlerine sahip olacak şekilde belirlenirler. Dolayısıyla programın herhangi bir yerinde bu numaralandırıcıya ait elemana ulaştığımızda, bu elemanın index değerine erişmiş oluruz. Gördüğünüz gibi numaralandırıcı kullanmak okunurluğu arttırmaktadır. Dilersek numaralandırıcı elemanlarının 0 indexinden değil de herhangi bir değerden başlamasını sağlayabilir ve hatta diğer elemanlara da farklı index değerleri atayabiliriz. Basit bir Numaralandırıcı örneği ile konuyu daha iyi anlamaya çalışalım.
using System;
namespace enumSample1
{
class Class1
{
/* Haftanın günlerini temsil edicek bir numaralandırıcı tipi oluşturuyoruz. Pazartesi 0 index değerine sahip iken Pazar 6 index değerine sahip olucaktır.*/
enum Gunler
{
Pazartesi,
Sali,
Carsamba,
Persembe,
Cuma,
Cumartesi,
Pazar
}
static void Main(string[] args)
{
Console.WriteLine("Pazartesi gününün değeri={0}", (int)Gunler.Pazartesi);
Console.WriteLine("Çarşamba günün değeri={0}", (int)Gunler.Carsamba);
}
}
}
Burada Gunler yazdıktan sonra VS.NET’in intellisense özelliği sayesinde, numaralandırıcının sahip olduğu değerlere kolayca ulaşabiliriz.

Şekil 1. Intellisense sağolsun.
Programı çalıştıracak olursak aşağıdaki ekran görüntüsünü elde ederiz.

Şekil 2. İlk Örnek
Şimdi başka bir örnek geliştirelim. Bu kez numaralandırıcının değerleri farklı olsun.
enum Artis
{
Memur=15,
Isci=10,
Muhendis=8,
Doktor=17,
Asker=12
}
static void Main(string[] args)
{
Console.WriteLine("Memur maaşı zam artış oranı={0}",(int)Artis.Memur);
Console.WriteLine("Muhendis maaşı zam artış oranı= {0}",(int)Artis.Muhendis);
}

Şekil 3. İkinci Örneğin Sonucu
Dikkat edecek olursak, numaralandırıcıları program içinde kullanırken, açık olarak (explicit) bir dönüşüm yapmaktayız. Şu ana kadar numaralandırıcı elemanlarına integer değerler atadık. Ama dilersek Long tipinden değer de atayabiliriz. Fakat bu durumda enum’ın değer türünü de belirtmemiz gerekmektedir. Örneğin,
enum Sinirlar:long
{
EnBuyuk=458796452135L,
EnKucuk=255L
}
static void Main(string[] args)
{
Console.WriteLine("En üst sınır={0}",(long)Sinirlar.EnBuyuk);
Console.WriteLine("Muhendis maaşı zam artış oranı={0}",(long)Sinirlar.EnKucuk);
}
Görüldüğü gibi Sinirlar isimli numaralandırıcı long tipinde belirtilmiştir. Bu sayede numaralandırıcı elemanlarına long veri tipinde değerler atanabilmiştir. Dikkat edilecek bir diğer nokta da, bu elemanlara ait değerleri kullanırken long tipine dönüştürme yapılmasıdır. Bir numaralandırıcı varsayılan olarak integer tiptedir. Bu nedenle integer değerleri olan bir numaralandırıcı tanımlanırken int olarak belirtilmesine gerek yoktur. Şimdi daha çok işe yarar bir örnek geliştirmeye çalışalım. Uygulamamız son derece basit bir forma sahip ve birkaç satır koddan oluşuyor. Amacımız numaralandırıcı kullanmanın programcı açısından işleri daha da kolaylaştırıyor olması. Uygulamamız bir Windows Application. Form tasarımımız aşağıdaki gibi olacak.

Şekil 4. Form Tasarımımız.
Form yüklenirken Şehir Kodlarının yer aldığı comboBox kontrolümüz otomatik olarak numaralandırıcının yardımıyla doldurulucak. İşte program kodları.
public enum AlanKodu
{
Anadolu=216,
Avrupa=212,
Ankara=312,
Izmir=412
}
private void Form1_Load(object sender, System.EventArgs e)
{
comboBox1.Items.Add(AlanKodu.Anadolu);
comboBox1.Items.Add(AlanKodu.Ankara);
comboBox1.Items.Add(AlanKodu.Avrupa);
comboBox1.Items.Add(AlanKodu.Izmir);
}
İşte sonuç,

Şekil 5. Sonuç.
Aslında bu comboBox kontrolünü başka şekillerde de alan kodları ile yükleyebiliriz. Bunu yapmanın sayısız yolu var. Burada asıl dikkat etmemiz gereken nokta numaralandırıcı sayesinde bu sayısal kodlarla kafamızı karıştırmak yerine daha bilinen isimler ile aynı sonuca ulaşmamızdır. Geldik bir makalemizin daha sonuna. İlerliyen makalelerimizde bu kez yine kendi değer tiplerimizi nasıl yaratabileceğimize struct kavramı ile devam edeceğiz. Hepinize mutlu günler dilerim.