Çoklu Enum Değerleri — Flags (C#)
Merhabalar,
Enum da Flags diye bir attribute varmış.Bu attribute’ün amacı enumerationlara çoklu degerler verebilmemizi sağlıyor.Şöyle ki normal bir enum tanımlaması şu şekilde.
public enum Yetki
{
Ekleme,
Silme,
Degistirme
}
Yalnız yetki olarak hem ekleme hemde silme yetkisi vermek istediğimizi düşünelim.Bu iki yetkiyi barındıran tek bir enum tanımlamak istersek,
[Flags]
public enum Yetki
{
Ekleme = 1,
Silme = 2,
Degistirme = 4,
Admin = Ekleme | Silme
}
O da bu şekilde olacaktır.
Çoklu yetki tanımlamasını yapabilmek için enum değerlerine 2'nin üslerini(1,2,4,8,16…)) verebiliyoruz.Bunun sebebi ne diye merak etmişsinizdir.Etmediyseniz bir yazılımcının sahip olması gereken en önemli özellikten mahrum olabilirsiniz dikkat edin..
Neyse ben merak ettim ve şöyle bir bilgiye ulaştım.Yine yetki enumundan devam edecek olursak kullanıcının yetkisini veritabanında bir field da tuttuğumuzu düşünelim.
Bu field da örneğin Admin yetkisini tutacak olursak, fielda Ekleme ve Silme enumlarının değerlerini toplayıp yazıyoruz.Yani x kullanıcısına admin yetkisi atamak istersek yetki field ına 1 + 2 = 3 değerini atıyoruz.
Değiştirme yetkisi vermek istersek yine bu rakama + 4 ekleyerek 7 değerini tutuyoruz.
Bu şekilde şunu sağlamış oluyoruz ki; bir kullanıcının yetki değeri 7 ise bu kullanıcının ekleme,silme,ve değiştirme yetkisi olduğunu anlamış oluyoruz.Eğer ki enum lar 2 nin üsleri şeklinde ilerlemeseydi ve biz Değiştirme enum’ının değerine 3 deseydik,
Yetki değeri 3 olan bir kullanıcının; değiştirme yetkisine mi yoksa ekleme ve silme yetkisine mi sahip olduğunu anlayamayacaktık.
Tam olarak amacı anlatabildim mi emin değilim ama, kısaca özetleyecek olursam; 2 nin üsleri şeklinde değer verilmesinin sebebi 2 enum değerinin toplamının, herhangi bir enum değeriyle çakışmaması amacını taşıdığıdır.