C# Eğitimleri 35 – Enum Yapısı

C# Eğitimlerimize Enum yapısı ile devam ediyoruz.

Enum Nedir?

Enum –> Enumaration

Enum yapısına temel bir tanım getirmek gerekirse kullanılacak sabit değerlere sayısal değerler atayarak kolay kullanımını sağlayan yapıya enum diyebiliriz.

Neden Enum Kullanırız?

Enum kullanımının 2 sebebi olduğunu söyleyebiliriz.

  • Kod okunurluğunu artırmak
  • Erişim kolaylığı ve düzen ile olası hataların büyük oranda  önüne geçilmesini sağladığı için kullanılır.

Genel Yapı

[php]

public enum Enumİsmi

{

// Elemanlar

}

[/php]

Bunları öğrendiğimize göre biraz gerçek hayattan örnekler bulalım ve anlamaya çalışalım.

Proje Bilgisi

Bir firmada IT biriminde çalıştığımızı varsayalım. Bu firmanın IT birimine tüm bölümlerden yazılımsal Help Desk istekleri geliyor. Programda istek gönderildiği anda istek gönderildi 1 olarak tutuluyor olsun. İşlemi gören Yönetici bu isteği onayladığında Onaylandı ifadesi 2 olarak tutulsun. HelpDesk’i IT departmanında bir çalışana atamasını yaptığında işlemde olarak gözüksün. İşlemde 3 ile tutulsun. Çalışan işi bitirdiğinda tamamlandı olarak işaretlensin ve bu tamamlandı değeri de 4 olarak tutulsun.

Bunu enum kullanarak gerçekleştirelim.

[php]

public enum HelpDesk
{
İstekGönderildi = 1,
Onaylandı = 2,
İşlemde = 3,
Tamamlandı = 4
}

[/php]

Bir enum tanımlaması temel anlamda bu şekildedir.

Yukarıda yazdığım soruyu tam olarak projelendirmeden önce Enum ile ilgili bir kaç bilgi daha vermeliyim.

Enum sabitleri içindeki değerlere ulaşmak istediğimizde kullanabileceğimiz yöntemlerden biri GetNames() metodudur. Bir Enum sabiti bu metodun kullanımı ile bir string dizisi haline dönüştürülüp değerleri o şekilde de kullanılabilir.

Enum’u String Diziye Dönüştürme (GetNames() Metodu)

Yukarıdaki enum sabitini bir diziye atalım.

[php]

string[] HelpDeskDizi = Enum.GetNames(typeof(HelpDesk));

label1.Text = HelpDeskDizi[0].ToString();

[/php]

Yukarıdaki örnek kodlamada olduğu gibi alabiliriz. Diziye attığımız bu değerlere dizi kurallarına göre ulaşabiliriz sadece. Önceki derslerimde söylediğim kuralı tekrar hatırlatmakta fayda var. Dizi elemanları 0 dan saymaya başlar.

HelpDeskDizi[0] bu değer bize geriye İstek Gönderildi değerini dönecektir.

ToString() Kullanımı

Enum sabitleri ile ToString metodunun parametrelerini kullanarak istediğimiz değerleri alabilme ihtimalimiz var.

Parametre     Görevi
G veya g         Değeri genel formatta yazar.
D veya d         Değerin sayısal karşılığını yazar.
X veya x         Değerin Hexadecimal karşılığını yazar.

Bilmemiz gereken çoğu şeyi öğrendiğimize göre şimdi sorumuza dönelim. Projenin tam haline bakalım.

Proje Tasarım

Proje Kodlar

[php]

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace EnumTipi
{
public partial class Form1 : Form
{
public enum HelpDesk
{
İstekGönderildi = 1,
Onaylandı = 2,
İşlemde = 3,
Tamamlandı = 4
}

public Form1()
{
InitializeComponent();
}

Random r = new Random();

private void button1_Click(object sender, EventArgs e)
{
int x = r.Next(1, 5);

HelpDesk HD = new HelpDesk();

switch (x)
{
case 1:
HD = HelpDesk.İstekGönderildi; break;
case 2:
HD = HelpDesk.Onaylandı; break;
case 3:
HD = HelpDesk.İşlemde; break;
case 4:
HD = HelpDesk.Tamamlandı; break;
}

label2.Text = x.ToString();
label1.Text = HD.ToString("G");
}

}
}

[/php]

 

Kod İnceleme

Soruda da belirtildiği gibi değerlerimizi öncelikle bir enum tanımlaması şeklinde yazdık.

public enum HelpDesk
{
İstekGönderildi = 1,
Onaylandı = 2,
İşlemde = 3,
Tamamlandı = 4
}

Enum tanımının sınıf içinde yapıldığına dikkat ediniz. Metodlar içinde Enum tanımlamaları gerçekleştiremezsiniz.

Programda sadece göstermek amaçlı rastgele değer türeten metodumuzu yazdık ve istediğimiz sayısal değeri türettik.

Random r = new Random();

int x = r.Next(1, 5);

Random sınıfından bir sonraki dersimizde detaylı bahsedeceğiz.

HelpDesk HD = new HelpDesk();

Enum tanımımızdan bir nesne türettik içindeki değerlere ulaşmak için. Bir önceki yazımda bahsettiğim struct konusuna bu anlamda benzerdir.

switch (x)
{
case 1:
HD = HelpDesk.İstekGönderildi; break;
case 2:
HD = HelpDesk.Onaylandı; break;
case 3:
HD = HelpDesk.İşlemde; break;
case 4:
HD = HelpDesk.Tamamlandı; break;
}

Switch case yapısı ile gerekli kontrolü yaptırıp HD nesnemize gelen değeri atadık.

label2.Text = x.ToString();
label1.Text = HD.ToString(“G”);

En son işlemde yazdırma işlemidir. Kullanıcıya durumu gösterdik.

HD.ToString(“G”) ile gelen değerin tam enumdaki string karşığını aldık.

G yerine D yazsaydık sayısal değerini alırdık.

Proje Ekran Görüntüleri

Enum sabiti böyleydi. Bir sonraki eğitim yazımızda görüşmek üzere.

Facebook Sayfamizdan Bizleri Takip Edebilirsiniz
Murat Bilginer

Industryolog Akademi Founder – Endüstri Mühendisi
Canias ERP Troia Geliştiricisi & Yazılım Uzmanı
7 Yıldır bildiğini paylaşmak için çabalayan bir blogger.

http://muratbilginer.net/