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]

Numaralandırma tutulan değişkenlere karşılık gelen değerler tablosu

Numaralandırma tutulan değişkenlere karşılık gelen değerler tablosu

Ö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]

Numaralandırma tutulan değişkenlere karşılık gelen değerler tablosu

Numaralandırma tutulan değişkenlere karşılık gelen değerler tablosu

 

[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 tutulan değişkenlere karşılık gelen değerler tablosu

Numaralandırma tutulan değişkenlere karşılık gelen değerler tablosu

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

Ahmet Şenlik

Kocaeli Üniversitesinde Bilgisayar Programcılığı okudum DGS ile 2016 yılında Sakarya Üniversitesi Bilgisayar mühendisliğini kazandım. Yazılımla uğraşmayı çok seviyorum bu alanda kendimi daha da geliştirmeyi düşünüyorum. Eğer siz de seviyorsanız bu işi devam edin başlamadıysanız başlayın başaracağınıza inanın. :)

You may also like...

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.