20.6.2013
4.17 / 6 oy

C# Dersleri 15-Numaralandırmalar

14. makalede bahsettiğimiz değer ve referans türü verilerin devamı niteliğinde bu makalede numaralandırma (enumeration) ve yapı (structure) değer türlerinden bahsedilecektir.

C# Numaralandırmaları (C# Enumerations)

Önceki makalelerimizde kullandığımız ve ay ismini çıktı olarak veren metodumuz, numaralandırmaların faydalarını göstermek açısından yararlı olacaktır.

public string ayAdiGetir (int i)

{

if (i==1)

return “Ocak”;

else if (i==2)

return “Şubat”;

...

else if (i==12)

return “Aralık”;

}

Problem: Ayların sırasının gönderilmesi ile çağırabildiğimiz ay isimleri için 1 ile 12 dışında bir sayı gönderirsek ne olacak? Ayrıca ben Haziran çıktısını almak için Haziran ayının 6. ay olduğunu hatırlamak zorunda mıyım?

Çözüm: Bu örnekteki gibi sıralı içeriklerin yönetimine ilişkin C# programlama dili bize yukarıdaki metoddan daha iyi bir çözüm yolu sunmaktadır. enum anahtar sözcüğü ile kullanabileceğimiz numaralandırmakarı kullanarak aynı işlemi daha kullanışlı olarak aşağıdaki gibi yapabiliriz.

enum Aylar { Ocak, Şubat, Mart, Nisan, Mayıs, Haziran, Temmuz, Ağustos, Eylül, Ekim, Kasım, Aralık }

Yarattığımız Aylar numaralandırmasının kullanımı ise aşağıdaki gibi mümkün olacaktır:

namespace Uygulama15

{

    class Program

    {

        enum Aylar { Ocak, Şubat, Mart, Nisan, Mayıs, Haziran, Temmuz, Ağustos, Eylül, Ekim, Kasım, Aralık }

        static void Main(string[] args)

        {

            Aylar localAy = Aylar.Haziran;

            Console.WriteLine(localAy);

        }

 

    }

}

Çıktı:Haziran

Not: Diğer değer türleri gibi, numaralandırmalarda da ? karakterini kullanarak nullable (null değer alabilir) değişkenler yaratabiliriz.

Numaralandırmaları indeks değerlerini kullanarak ilişkilendirme şansımız da vardır. Numaralandırmalar varsayılan olarak, ilk elemanları 0 olmak üzere birer birer artan düzende numaralandırılırlar.

class Program

    {

        enum Aylar { Ocak, Şubat, Mart, Nisan, Mayıs, Haziran, Temmuz, Ağustos, Eylül, Ekim, Kasım, Aralık }

        static void Main(string[] args)

        {

            Aylar localAy = Aylar.Haziran;

            Console.WriteLine((int)localAy);

        }

    }

Çıktı: 5

Açıklama: 6. ay olan Haziran ayının indeks değeri, numaralandırmaların ilk değerlerinin 0 olarak indekslenmesi sebebiyle 5 olacaktır.

Ancak varsayılan indekslemeyi değiştirerek her ay için karşılık gelen ay sırasını kendimiz de atayabiliriz:

Kodlarımızı aşağıdaki gibi güncellediğimizde;

class Program

    {

        enum Aylar { Ocak=1, Şubat=2, Mart=3, Nisan=4, Mayıs=5, Haziran=6, Temmuz=7, Ağustos=8, Eylül=9, Ekim=10, Kasım=11, Aralık=12 }

        static void Main(string[] args)

        {

            Aylar localAy = Aylar.Haziran;

            Console.WriteLine((int)localAy);

        }

    }

Çıktı: 6

Yeni çıktımız, Haziran ayının ilişkilendirildiği indeks olan 6 olacaktır.

Not: Birden çok numaralandırma içeriğine aynı değeri vermek mümkündür. Örneğin yukarıdaki örneğimizde tüm aylara 1 değeri verseniz de derleyici sorunsuz çalışacaktır.

Numaralandırma içeriklerinin indeks değerlerinin artırılması ya da azaltılması ile güncellenmesi de mümkündür.

class Program

    {

        enum Aylar:short { Ocak=1, Şubat=2, Mart=3, Nisan=4, Mayıs=5, Haziran=6, Temmuz=7, Ağustos=8, Eylül=9, Ekim=10, Kasım=11, Aralık=12 }

        static void Main(string[] args)

        {

            Aylar localAy = Aylar.Haziran;

            localAy++;

            Console.WriteLine((int)localAy);

        }

    }

Çıktı: 7

Numaralandırma Türleri

Bir numaralandırma türü bildirdiğinizde, numaralandırma içeriğine varsayılan olarak int veri türünde değerler verilir. Ancak dilerseniz numaralandırma içeriğinizin veri türünü değiştirme şansınız da vardır.

Örneğin Aylar numaralandırmamızın arka plan türünü int yerine short olarak değiştirmek istersek;

enum Aylar :short  { Ocak, Şubat, Mart, Nisan, Mayıs, Haziran, Temmuz, Ağustos, Eylül, Ekim, Kasım, Aralık }

yazmamız yeterli olacaktır. Bu işlemin yegane sebebi ise, bellekten tasarruf etmektir. Eğer tamsayı saklayan veri türlerini kullanacaksanız ancak saklayacağınız veriler için çok küçük değerler kullanacaksanız, int veri türünden daha az yer kaplayan sayısal türler kullanmak oldukça mantıklı olacaktır.

Numaralandırmalarınızı byte, sbyte, short, ushort, int, uint, long ya da ulong tamsayı veri türlerinde saklayabilirsiniz.

C# Dersleri 15-Numaralandırmalar
Bu makalenin telif hakkı ve tüm sorumlulukları yazara ait olup, şikayetler için lütfen bizimle iletişime geçiniz.
URL:
Etiketler:

Bu makale 1899 kez okundu

20.6.2013 tarihinde yazıldı
Reitix

Yorumlar

  • taşkın
    taşkın
    2.10.2017

    yazılım argümanlarının Türkçeleştirilmesi bence pek doğru olmuyor, daha doğrusu bir yapının tüm dünyada aynı şekilde isimlendirilmesi gerektiğini düşünüyorum. artık yazılım projeleri tüm dünya ülkelerinden farklı dillere sahip insanlarla birlikte yürütülüyor, bunun da mümkün olmasının tek yolu herkesin ortak bir dil kullanmasından geçiyor

  • mursa
    mursa
    6.1.2016

    vektörlerin yeterli gelmediği noktalarda enum'a başvurulabilir, örnekler bence yeterince açıklayıcı

  • musluhan
    musluhan
    1.11.2014

    enum nerede kullanılır?

  • lazpart
    lazpart
    9.10.2014

    enum candır, teşkür ettim

Bu yazıya siz de yorum yapabilirsiniz