C# Numaralandırma (Enum)
Numaralandırma (enumeration); belli sözcüklerin, belli tamsayıları temsili durumlarında kullanılan bir yapıdır. Değişkenlerin alabileceği değerlerin sabit olduğu durumlarda kullanılır.
Numaralandırma(Enum) Tanımlama
Numaralandırmaları tanımlamak için’ enum’ anahtar kelimesini kullanırız.
Örneğin, içinde ay isimlerini barındıran bir numaralandırma tanımlayalım.
[csharp]enum aylar
{
Ocak, Şubat, Mart, Nisan, Mayıs, Haziran, Temmuz,
Ağustos, Eylül, Ekim, Kasım, Aralık
}[/csharp]
Örnekte Ocak ayı 0 değerini alacak ve ondan sonra gelen sabitlerin değeri birer artarak devam edip gidecektir.
Duruma göre tanımladığımız sabitlere farklı sayısal değerler de atayabiliriz. Bu işlem için “=” işlecini kullanmalıyız.
[csharp]enum aylar
{
Ocak=1,Şubat, Mart, Nisan, Mayıs, Haziran, Temmuz,
Ağustos, Eylül, Ekim, Kasım, Aralık
}[/csharp]
[csharp]enum aylar
{
Ocak=1,Şubat,Mart,Nisan,Mayıs,Haziran,Temmuz=1,
Ağustos, Eylül, Ekim, Kasım, Aralık
}[/csharp]
Yukarıda yazan örnekte ki tanımlamayı yaparsak sabitlerimizin değerleri aşağıda bulunan tablodaki gibi olacaktır.
Numaralandırma yapılarımızın içinde tutulan değerler varsayılan olarak integer tipindedir. İhtiyaca uygun olarak diğer tamsayı tiplerinde de (byte, sbyte, short, ushort, uint, long ve ulong) tanımlama yapılabilir.
[csharp]enum aylar : byte
{
Ocak, Şubat, Mart, Nisan, Mayıs, Haziran, Temmuz,
Ağustos, Eylül, Ekim, Kasım, Aralık
}[/csharp]
Burada dikkat etmemiz gereken parantezler içindeki değerler belirtilen türün kapasitesi ölçüsünde olmalıdır. Örneğin numaralandırmanın türünü byte olarak tanımladıysak en fazla 255 tane sözcük girmeliyiz.
Numaralandırma (Enum) Yapısını Kullanma
Bir önceki başlıkta numaralandırmaların nasıl tanımlandıklarını gördük. Şimdi de tanımladığımız numaralandırma yapılarını program içinde nasıl kullanacağımıza bakalım.
Öncelikle aylar adında bir enum tanımlayalım.
[csharp]enum aylar
{
Ocak, Şubat, Mart, Nisan, Mayıs, Haziran, Temmuz,
Ağustos, Eylül, Ekim, Kasım, Aralık
}[/csharp]
Şimdide enumu program içinde çağıralım.
[csharp]class Program
{
static void Main(string[] args)
{
aylar ay = aylar.Şubat;
Console.WriteLine(ay);
Console.Read();
}
}[/csharp]
Ekran çıktısı:
Şubat
[csharp]class Program
{
static void Main(string[] args)
{
aylar ay = aylar.Şubat;
Console.WriteLine((int)ay); // sabitin integer karşılığını ekrana yazdırdık.
Console.Read();
}
}[/csharp]
Ekran çıktısı:
1
Şimdi de yapımız içindeki tüm sabitleri ekrana nasıl yazdıracağımıza bakalım. Enum içindeki tüm sabitleri almak istediğimiz de GetNames() metodunu kullanırız. GetNames() metodu, enum içindeki tüm sabitleri string tipinde bir dizi olarak almamızı sağlar.
[csharp]enum aylar
{
Ocak,Şubat,Mart,Nisan,Mayıs,Haziran,Temmuz,
Ağustos,Eylül,Ekim,Kasım,Aralık
}
class Program
{
static void Main(string[] args)
{
string[] ay = Enum.GetNames(typeof(aylar)); // GetNames() metoduyla aldığımız değerleri string tipinde “ay” adında ki dizimize aktarıyoruz.
foreach (string ayYaz in ay)
{
Console.WriteLine(ayYaz);
}
Console.Read();
}
}[/csharp]
Bir sabitin enum içerisinde tanımlı olup olmadığını bulmak için IsDefined() metodunu kullanırız. Bu metot bool türünde bir sonuç döndürür.
[csharp]class Program
{
static void Main(string[] args)
{
bool kontrol = Enum.IsDefined(typeof(aylar), “Ocak”);
if (kontrol)
{
Console.WriteLine(“Bu ay tanımlıdır.”);
}
else
{
Console.WriteLine(“Bu ay tanımlı değildir.”);
}
Console.Read();
}
}[/csharp]
Kaynak: Megep Modülleri