C# Enum Nedir ? Enum Nasıl Kullanılır ?
C# Enum
Enum, enum sabitleri değişkenlerin alabileceği değerlerin sabit olduğu durumlarda, kodun okunabilirliği ve belirli kurallar dışına çıkılmaması için kullanabilirsiniz.
- Genellikle sabit değerleri belirli kıstaslarda kullanabilmek amacıyla kullanabilirsiniz.
- Sayısal verileri anlamlı kılabilmek amacıyla pek çok dilde kullanılan bir yapıdır.
- Dizeleri anlamlı isimlerle değiştirerek kodun netliğini arttırabilir.
- Enum değerinde yapılan güncelleme, bunu kullanan tüm kodlarda etkili olur. Tek bir yerden tüm değerler güncellenmiş olursunuz.
- Kullanıcıları tek tip değerlere yönlendirirsiniz, hataları azaltırsınız.
Genel kullanımı ise şu şekildedir :
[Erişim Belirteci] enum [Verilecek isim]
{
[Key]=[Value],
[Key]=[Value],
}
enum VehicleType {
Car,
Truck,
Motorcycle,
Bicycle,
Bus
}
Yukarıdaki örneği incelersek;
Eğer tanımlamalara herhangi bir değer belirtmez iseniz ilk tanımlama 0 (sıfır) ile başlayacaktır.
Bu şekilde bir tanımlama ile işlem yaptığınızda “(int)VehicleType.Car” olarak kullandığınızda göreceğiniz sonuç 0 (sıfır)’dır.
enum Status
{
Inactive, //Otomatik olarak 0 atanacaktır.
Active = 5, // Doğrudan atanan değeri 5 olur.
Suspended // Burada ise bör inceki değerden devam edecektir. Bu durumda ise Suspended 6 olacaktır.
}
Enum tanımlamaları yaparke açık bir şekilde veri türünüde belirtebilirsiniz.
enum SmallNumbers : byte
{
One = 1,
Two = 2,
Three = 3
}
Burada türünü byte olarak belirttiğimiz için int türüne göre daha küçük bir aralığa izin verecektir. Ancak bu durumunda faydaları bulunmaktadır. Boyut ve bellek anlamında tasarruf sağlayabilirsiniz. Belirli sayısal türler bekleyen harici sistemler veya dillerle çalışıyorsanız, temel türü belirtmek uyumluluğu sağlayabilir.
Numaralandırmaları veritabanında saklarken, temel türlerin belirtilmesi depolamanın boyutunu etkileyebilir ve performansı artırabilir.
Enumların bir diğer kullanımı ise Flags attribute ile olmaktadır.
[Flags]
public enum Permissions
{
None = 0,
Read = 1,
Write = 2
}
Console.WriteLine(Permissions.Read | Permissions.Write); //Read , Write
Console.WriteLine(Permissions.None | Permissions.Read ); //Read
Console.WriteLine((int)Permissions.None | (int)Permissions.Read ); //2
Console.WriteLine((int)Permissions.Read | (int)Permissions.Write); //3
Permissions permission = Permissions.Read | Permissions.Write;
Console.WriteLine(permission.HasFlag(Permissions.Read)); //True