Bu makele için Bilgehan YILDIZ' a teşekkürler
Enumlar kod okunabilirliğini arttıran veya bazı keywordlerimizi belli değerlerle birlikte temsil etmemize sağlayan bir tiptir.
Hemen hemen her yerde görebileceğimiz en temel enum yapısına örnek olarak genelde günler kullanılır.
Kod:
public enum Gunler
{
Pazartesi,
Sali,
Carsamba,
Persembe,
Cuma,
Cumartesi,
Pazar
}
Tabi Enumlarımızı temsil eden değerlerde atabiliriz.Bu makalede içine enum tipinde bir değişken alan fonksiyonun kullanımını göreceğimiz için ben aşağıdaki gibi bu temsil değerlerini 2 ve 2 nin katları şeklinde yaptım nedeni ise bit işlem yapabilmek için
Kod:
public enum Gunler
{
Pazartesi=1,
Sali=2,
Carsamba=4,
Persembe=8,
Cuma=16,
Cumartesi=32,
Pazar=64
}
Mesela gelen gunler Salı günü ise Sınavınız var diye yazacak bir örnek fonksiyon tanımlayalım.Aşağıdaki gibi fonksiyonumuzu önce direkt günün değerini yazdırdığımızda ekrana 10 değeri gelecektir.Ancak biz fonksiyonun içine Salı ve Perşembe gününü beraber gönderdik.Aşağıdaki gibi direkt bir kullanım yaparsak sonuç bize Belirtilen günlerde sınavınız yok dönecektir
Kod:
SinavGunlerGoster(Gunler.Sali | Gunler.Persembe);
public void SinavGunlerGoster(Gunler gun)
{
//MessageBox.Show(gun.ToString());Bunun çıktısı 10 olacaktır
if (gun == Gunler.Sali)
{
MessageBox.Show("Belirtilen günlerden birinde sınavınız var");
}
else
{
MessageBox.Show("Belirtilen Günlerde Sınavınız Yok");
}
}
Programın doğru çalışması için & le bit işlemi yapmamız gerekmektedir
if ((gun & Gunler.Sali) == Gunler.Sali)
{
Değerleri 2 ve katları vererek binary işlem yaparak doğru sonucu bulmuş olduk.
Mantık aşağıdaki gibidir
Gunler.Sali | Gunler.Persembe-->Sali-2 Perşembe 8 binary formatta
010
100 veya işlemine soktuğumuzda 110 yapar ki bunun toplamı 10 dur
Ancak bunu tekrar & le filtrelediğimizde(ve işlemine tuttuğumuzda) sadece Sali kalacak ve doğru sonucu bize verecektir (1 veya 0 -->1 ,1 ve 0 -->0 döner)
Metod son olarak bu şekilde olacaktır.
Kod:
public void SinavGunlerGoster(Gunler gun)
{
//MessageBox.Show(gun.ToString());
if ((gun & Gunler.Sali) == Gunler.Sali)
{
MessageBox.Show("Sınav Var");
}
else
{
MessageBox.Show("Sınav Yok");
}
}