Posted under C# (csharp)
Bu 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ürlerde 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üklekleyerek, program içerisinde kolay okunabilmelerini ve anlaşılabilmelerini sağlamaktır.
Örneklerimizde bu konuyu çok daha iyi anlıyacaksınız. Bir Numaralandırıcı tanımlamak için aşağıdaki sözdizimi (syntax) kullanılır.
| <Kapsam belirteçleri> enum <numaralandırıcıAdi> { <birinciUye>, <ikinciUye>, <ucuncuUye>, } |
Kapsam belirteçleri protected, public, private, internal yada new değerini alır ve numaralandırıcının geçerli olduğu kapsamı belirtir. Dikkat edilecek olursa, elemanlara herhangi bir değer ataması yapılmamıştır. Nitekim bu numaralandırıcıların özelliğidir. İlk eleman 0 değerine sahip olmak üzere diğer elemanlar 1 ve 2 değerlerini sahip olucak ş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 her hangibir değere bağlamasını sağlayabilir ve hatta diğer elemanlarada farklı index değerleri atayabiliriz. Basit bir numaralandırıcı örneği ile konuyu daha iyi anlamaya çalışalım.
| using System;
namespace enumSample1 /* Haftanin 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 static void Main(string[] args) Console.WriteLine(”Çarsamba günün degeri={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.
Programı çalıştırıcak olursak aşağıdaki ekran görüntüsünü elde ederiz:
Şimdi başka bir örnek geliştirelim. Bu kez numaralandırıcının değerleri farklı olsun.
| using System;
namespace enumSample enum Artis static void Main(string[] args) Console.WriteLine(”Muhendis maasi zam artis orani= {0}”,(int)Artis.Muhendis); } } |
Dikkat edicek 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‘in değer türünüde belirtmemiz gerekmektedir.Örnegin:
| using System;
namespace enumSample enum Sınırlar: Long static void Main(string[] args) Console.WriteLine(”Muhendis maasi zam artis orani={0}”,(long)Sinirlar.EnKucuk); } } |
Görüldüğü gibi Sınırlarlar 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 ise, 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 ise yarar bir örnek geliştirmeye çalısalım. Uygulamamız son derece basit bir forma sahip ve bir kaç 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 olucak.
Form yüklenirken Şehir Kodlarının yer aldığı comboBox kontrolümüz otomatik olarak numaralandırıcının yardımıyla doldurulucak. Işte program kodları:
| using System;
namespace enumSample enum AlanKodu: Long private void Form1_Load(object sender, System.EventArgs e) comboBox1.Items.Add(AlanKodu.Ankara); comboBox1.Items.Add(AlanKodu.Avrupa); comboBox1.Items.Add(AlanKodu.Izmir); } } } |
İşte 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.