Enum Nedir?

Bir enumeration listteki her bir eleman, bir sayısal değeri temsil eder. Defaultta ilk enumun değeri 0'dır ve her bir elemanın değeri bir öncekinden büyüktür. Ancak bu değerleri değiştirebilirsiniz.

enum Gunler { Pazartesi, Salı, Çarşamba, Perşembe, Cuma, Cumartesi, Pazar };

Tanımlama enum keywordu ile başlar ve ardından enumeration listin adını belirtmeniz gerekir. Daha sonra da süslü parantezler içinde değerlerini yazarsınız.

enum Gunler { Pazartesi = 1, Salı, Çarşamba, Perşembe, Cuma, Cumartesi, Pazar };
private void btnClick_Click(object sender, EventArgs e)
{
    int cuma = (int)Gunler.Cuma;

    MessageBox.Show("Cuma günü haftanın " + cuma + ". günü");
}

Eğer hiç bir değişiklik yapmazsak listenin ilk elemanı olan "Pazartesi"ye 0, "Salı"ya 1... değeri atacaktı. Daha gerçekçi olması için "Pazartesi"ye 1 değeri atadım. Geri kalan elemanlarının değerlerini compiler otomatik olarak arttırdı.

Neden Enum Kullanırız

Enum kullanımı aslında çok kritiktir ancak çalıştığım yerlerde gördüm ki yazılımcılarımız enuma gerektiği kadar değer vermiyor. Enum kullanımını bir örnek üzerinden açıklamak istiyorum.

Bir fabrikadaki makinelerle ilgili bir uygulama yazdığınızı varsayın. Makinenin şuanki durumuna bağlı olarak yapacağınız işlemin değişeceğini kabul edelim; yani önce makinenin durumunu kontrol edeceksiniz. Bu durumu kontrol etmek için birkaç yol var. İlk olarak makinelerin durumlarını string olarak tuttuğunuzu(veritabanında veya herhangi bir data saklama biriminde) düşünelim. if(machine.Status == "working") şeklinde bir kod cümleniz olsun. Eğer makine çalışıyorsa ona göre işlem yapacaksınız. Ancak dalgınlıkla if(machine.Status == "woking") yazarsanız(ya da başka herhangi bir imla hatası), compiler bu hatayı yakalamanızda hiç yardımcı olmaz. Büyük bir projede bu şekilde bir hata yaptığınızda bu sorunun çözümü saatlerinizi alabilir. Bu yüzden bu tarz datayı string olarak saklamak sanırım en kötüsüdür.

Bunun yerine sayısal bir değer kullanmak daha mantıklıdır yani çalışan makineye 1 değerini atadıysanız if(machine.Status == 1) gibi. Ancak bir makineye ait 15 tane status varsa(çalışıyor,duraklatıldı,durdu,arızalı,setup vs) bunları nasıl hatırlayacaksınız? Kod yazarken hangi statusun hangi değere sahip olduğunu hatırlamak için belki defalarca kontrol etmeniz gerekecek.

Doğru çözüm enum kullanmak. Şu şekilde bir enum oluşturduğunuzu düşünün :

enum Statuses { Working, NotWorking, Faulty, Stopped };

Daha sonra bir makinenin durumunu kontrol edecekseniz if(machine.Status == Statuses.Working) kod cümlesi kullanabilirsiniz. İmla hatası yapmanız imkansız. 15 farklı sayısal değeri de aklınızda tutmanıza gerek yok.

-----------------------------------------------------ÖRNEK---------------------------------------------------------

Aşağıdaki örnekte ise Evturu isimli Enum tanımlanıp, bu yapıya ait değerler Ev isimli sınıfın içinde kullanılıyor sınıfın yapıcı metotunda eve özellik olarak bilinmiyor değeri aktarılıyor daha sonra program içerisinde bu değer müstakil olarak değiştirilip ekranda görüntüleniyor

public enum EvTuru
       {
           Bilinmiyor,
           Apart,
           Apartman,
           Müstakil
       }
 
       public class Ev
       {
           public EvTuru ozellik;
 
           public Ev()
           {
               ozellik = EvTuru.Bilinmiyor;
           }
 
           public void Goruntule()
           {
               Console.WriteLine("Evinizin Özelliği: {0}", ozellik);
           }
       }
 
       static void Main(string[] args)
       {
           Ev bicim = new Ev();
           bicim.Goruntule();
           bicim.ozellik = EvTuru.Müstakil;
           bicim.Goruntule();
           Console.WriteLine();
           Console.ReadKey();
       }

ÇIKTI

Enum ı yazdırırken =(Role)Enum.Parse(typeof(Role) ----->ROLE enum ismi.

public void GetRole(ComboBox comboBox) {

//enumdaki sabitleri combobox a dolduruyorum

comboBox.Items.AddRange(Enum.GetNames(typeof(Role))); //AddRange->tüm bir öğenin koleksiyonun ekler.

comboBox.SelectedIndex = 0;

} //getrole methodunun icindeki enum sabitlerini Combobox a dolduruyoruz

Last updated