19 Eylül 2011 Pazartesi

C# Enum Type

.Net’deki 5 temel tipten biri olan enum, bir değer aralığının tanımlandığı sayısal bir tiptir. Bir başka tanımla, sayıları kod içerisinde direk kullanmak yerine, isim vererek kullanmaktır. Değer türlü olduklarından ötürü ram’in stack bölgesinde yer alırlar. Gunler adında bir enum tanımlayalım;

enum Gunler

    {

        Pazartesi, Salı, Çarşamba, Perşembe, Cuma, Cumartesi, Pazar

    }

Yukarıdaki örneğe göre, pazartesi 0 değerini alır ve sonraki sabitlerin değeri de 1’er artarak devam eder. Tanımladığımız sabitlere sayısal bir değer verebilmemiz de mümkündür.

enum Gunler

    {

        Pazartesi = 1,

        Salı = 5,

        Çarşamba, // 6 değerini alacaktır

        Perşembe, // 7 değerini alacaktır

        Cuma = 141,

        Cumartesi, // 142 değerini alacaktır

        Pazar = 320

    }

Aksini belirtmediğimiz sürece içeride tutulan tüm değerler integer tipindedir. Ancak ihtiyacımıza göre, diğer tam sayısal tipleri de kullanabiliriz (byte, short, long)

enum Gunler : byte

    {

        Pazartesi, Salı, Çarşamba, Perşembe, Cuma, Cumartesi, Pazar

    }

Kod içerisinde ele alınış biçimleri ise,

Untitled

Şimdi küçük bir örnek ile enum sabitlerinin kullanımlarını incelemeye çalışalım. Ilk olarak Renkler adında bir enum tasarlayalım. Daha sonra da Urun adında bir sınıf tasarlayalım. Bu sınıfın  Id, Ad ve Renk adında 3 adet property’si olsun. Renk property’si Renkler tipinden olsun.

public enum Renkler : byte

    {

        Siyah, Beyaz, Sari, Kirmizi, Yesil, Mavi

    }

public class Urun

    {

        int _id;

        string _ad;

        Renkler _renk;

 

        public int Id

        {

            get { return _id; }

            set { _id = value; }

        }

 

        public string Ad

        {

            get { return _ad; }

            set { _ad = value; }

        }

 

        public Renkler Renk

        {

            get { return _renk; }

            set { _renk = value; }

        }

 

        public Urun(int id, string ad, Renkler renk)

        {

            Id = id;

            Ad = ad;

            Renk = renk;

        }

    }

Program tarafında bir Urun nesnesi örnekleyelim ve rengini ekrana yazdıralım.

public class Program

    {

        static void Main(string[] args)

        {

            Urun u = new Urun(1, "Monitör", Renkler.Siyah);

 

            Console.WriteLine(u.Renk.ToString());

        }

    }

Ekranda “Siyah” yazısını göreceğiz. Enum tipinin değer türlü olduğunu söylemiştik. O halde bu tipin sayısal karşılığını elde etmek veya kullanmak isteyebiliriz. Bunun için cast işlemi yapmamız gerekmektedir.

Urun u = new Urun(1, "Monitör", Renkler.Siyah);

Console.WriteLine((byte)u.Renk);

Yukarıdaki kod çalıştığında ekranda “0” yazdığını göreceğiz. Eğer ürünün rengi “Sari” olsaydı, ekranda “2” yazdığını görecektik. Çünkü enum sabitleri birer artarak değer alırlar (aksini belirtmediğimiz sürece). Siyah=0, Beyaz=1, Sari=2… şeklinde devam edecektir.

Şimdi de string bir değerin Enum tipine nasıl dönüştürüleceğini inceleyelim. Kullanıcıdan bir renk girmesini isteyelim ve bu rengi , yeni tasarladığımız ürünün rengine atayalım. Bu dönüştürme işlemi için Enum sınıfının static olan “Parse” metodunu kullanacağız. İlk parametre, dönüştüreceğimiz Enum tipi, ikinci parametre ise dönüştürülecek string değerdir. Üçüncü parametre ise küçük-büyük harf duyarlılğını belirtebileceğimiz boolean bir değer alır.(2.kullanım). Parse metodu geriye objcet döndüğünden cast işlemi de yapmamız gerekecektir.

public class Program

    {

        static void Main(string[] args)

        {

            Console.Write("Bir renk giriniz: ");

            string renkBilgisi = Console.ReadLine();

 

            if (Enum.IsDefined(typeof(Renkler), renkBilgisi))

            {

                Renkler girilenRenk = (Renkler)Enum.Parse(typeof(Renkler), renkBilgisi);

                Urun u2 = new Urun(2, "Klavye", girilenRenk);

                Console.WriteLine("Urun adı: {0} , Urun rengi: {1}", u2.Ad, u2.Renk.ToString());

            }

            else

            {

                Console.WriteLine("Böyle bir renk tanımlı değil");

            }

 

        }

    }

IsDefined metodu, girilen değerin Enum tipi içerisinde tanımlı olup olmadığını kontrol eder.

Untitled

Girdiğimiz renk bilgisi, Renkler içerisinde mevcut değil ise,

Untitled



1 yorum:

TrapperX dedi ki...
Bu yorum yazar tarafından silindi.

Yorum Gönder