İsmail Cem YALNIZ

İsmail Cem Yalnız

Bilgisayar Mühendisi

Anasayfa Hakkımda Makaleler İletişim bayrağımız

C# Enum Kullanımı

Tarih: 27.12.2014

Enum(numaralandırma), isimlerin integer veri tipinde projemiz üzerinde sabitlemeye yarar. C# ta Enum kullanımı önemli bir yere sahiptir. Nerdeyse tüm .net projelerinde enum kullanılmaktadır.

Enum anahtar kelimesinin kullanımını bir örnekle açıklamak istiyorum. Örneğin bir mağazamız var ve yazılımımızın veritabanında SATIŞLARIN bulunduğu SATIS isminde bir tablomuz var. Bu tablo içerisinde TIP (ödeme tipi) sütunu mevcut. Ödeme Tiplerimiz ise Nakit, Kredi Kartı ve Kapıda Ödeme olsun. Tipi string olarak herbir satıra Nakit, Kredi Kartı veya Kapıda Ödeme diye yazmaktansa smallInt (short) veya integer tipinde sayı olarak tanımlarız. Yani Nakit ise 1, Kredi Kartı ise 2, Kapıda Ödeme ise 3 olarak veritabanında tutarız. Birçok veritabanı tablolarında böyle tip tarzı sütunları ihtiyacımız dâhilinde oluştururuz. Projelerimize rahat hakimiyet sağlamak yani hangi rakamın neye hitap ettiğini unutmamak amacıyla enum içerisinde bulundururuz. O zaman gelin birlikte bir enum yazalım. Ben değişken ismine SATIS_TIP dedim numarasını da birden başlattım siz de int bir sayı olmak şartıyla istediğiniz sayıdan başlayın ve istediğiniz değişken istediğiniz class üzerinde tanımlayın.

 

Public enum SATIS_TIP
{
NAKIT = 1,
KREDI_KARTI = 2,
KAPIDA_ODEME = 3
}

Not: Eğer benim atadığımın aksine her bir isim için(NAKIT, KREDI_KARTI, KAPIDA_ODEME) bir değer ataması yapmadan tanımlarsanız sistem numarayı 0 dan başlatır. İhtiyacınıza göre dilerseniz yukarıdaki tanımladığımız SATIS_TIP teki gibi düzenli artan(1,2,3..) değil de farklı integer değerler de verebilirsiniz.

Peki enum oluşturtuk ama projemizde bu tablomuzun tip alanıyla ilgili bir kod yazarsak nasıl olmalı? Tabii ki profesyonel, başkalarının da çok rahat anlayabileceği yani 1,2 gibi rakamlar vererek değil de enum ismini kodlamada bulunduracak şekilde yazılmalıdır.

Örnek Konsol uygulamamız aşağıdadır.

using System;

namespace EnumKullanimi
{
    public class SATIS
    {
        public int ID { get; set; }
        public string URUN_ADI { get; set; }
        public short SATIS_TIP { get; set; }
        public short KDV_TIP { get; set; }
    }

    public enum SATIS_TIP
    {
        NAKIT = 1,
        KREDI_KARTI = 2,
        KAPIDA_ODEME = 3
    }

    public enum KDV_ORAN
    {
        YUZDE_SIFIR,
        YUZDE_BIR,
        YUZDE_SEKIZ,
        YUZDE_ONSEKIZ
    }

    class Program
    {
        static void Main(string[] args)
        {
            
            SATIS satis = new SATIS();
            satis.ID = 1;
            satis.URUN_ADI = "Bulaşık Makinesi";
            satis.SATIS_TIP = 0;
            satis.KDV_TIP = 0;
            //enumu değerine göre kullanıcıya mesaj verelim
            switch ((SATIS_TIP)satis.SATIS_TIP)
            {
			//aşağıya 1 yazmaktansa SATIS_TIP.NAKIT yazmak sence 
			//de daha okuna bilir değil mi?
                case SATIS_TIP.NAKIT:
                    Console.WriteLine("Nakit Ödeme Bekleniyor.");
                    break;
                case SATIS_TIP.KREDI_KARTI:
                    Console.WriteLine("Kredi Kartı ile Ödeme Alındı.");
                    break;
                case SATIS_TIP.KAPIDA_ODEME:
                    Console.WriteLine("Kapıda Ödeme Bekleniyor.");
                    break;
                default:
                    break;
            }
            //toplam enum sayısını bulalım
            Console.WriteLine("\n  Toplam enum sayısı {0}",
                              Enum.GetNames(typeof(SATIS_TIP)).Length.ToString());
            //enum isimlerini ekrana yazalım
            foreach (var item in Enum.GetNames(typeof(SATIS_TIP)))
            {
                Console.WriteLine("\n\t{0}",item);
            }
            //kdv oranlarının integer enum değerlerini ekrana yazalım
            
            Console.WriteLine("\n  {0}", (int)KDV_ORAN.YUZDE_SIFIR);
            Console.WriteLine("\n  {0}", (int)KDV_ORAN.YUZDE_BIR);
            Console.WriteLine("\n  {0}", (int)KDV_ORAN.YUZDE_SEKIZ);
            Console.WriteLine("\n  {0}", (int)KDV_ORAN.YUZDE_ONSEKIZ);
            Console.ReadKey();
        }
    }

}

Uygulamamızı çalıştırdığımızda aşağıda Resim1 deki gibi bir sonuç alırız

 

Resim1

 KATEGORİLER