C# indexer Kullanımı

Herkese merhaba, C# yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda indexer kullanımını anlatacağım. Hadi başlayalım !
Table of Contents
Tanım
C# programlama dilinde, Indexer olarak da adlandırılan İndeksleyici, bir sınıfın öğelerine erişmek için kullanılan bir özelliktir. İndeksleyici, bir nesne üzerinde bir dizin veya anahtar kullanarak sınıfın öğelerine erişmeyi sağlar. Bu, C# dilindeki matrislerin veya sözlüklerin nasıl kullanıldığına benzer bir yaklaşımdır.
Indexer, bir sınıfın içindeki öğelerin üzerinde işlem yapmak için kullanılır. Örneğin, bir kitap sınıfında, kitapların ISBN numaralarını indeksleyici olarak kullanarak kitapların ayrıntılarına erişilebilir.
Indexer, iki ana bölümden oluşur: get ve set. Get bölümü, belirli bir anahtar veya dizin ile öğe okuma işlemini gerçekleştirirken, set bölümü belirtilen anahtar veya dizine göre öğeyi günceller.
Örnek
Örnek bir sınıf üzerinde indexer kullanımını göstermek için, basit bir öğrenci sınıfı oluşturalım. Bu sınıfın öğrenci adlarına ve öğrenci numaralarına sahip olduğunu varsayalım. Bu sınıfta, indexer kullanarak öğrenci numarasına göre öğrenci adına erişeceğiz.
class Ogrenci
{
private string[] ogrenciAdi;
private int[] ogrenciNo;
public Ogrenci()
{
ogrenciAdi = new string[3] { "Ali", "Veli", "Ayşe" };
ogrenciNo = new int[3] { 101, 102, 103 };
}
public string this[int no]
{
get
{
for (int i = 0; i < ogrenciNo.Length; i++)
{
if (ogrenciNo[i] == no)
{
return ogrenciAdi[i];
}
}
return "Öğrenci bulunamadı";
}
set
{
for (int i = 0; i < ogrenciNo.Length; i++)
{
if (ogrenciNo[i] == no)
{
ogrenciAdi[i] = value;
}
}
}
}
}
Yukarıdaki örnekte, Ogrenci sınıfı öğrenci adlarını ve öğrenci numaralarını saklamak için iki ayrı dizi kullanır. Dizi öğelerine erişmek için bir indeksleyici kullanılır. İndeksleyici, Ogrenci sınıfında “this” anahtar kelimesi ile tanımlanır.
Öğrenci sınıfındaki indeksleyici, int tipinde bir parametre alır. Bu parametre, öğrenci numarasını temsil eder. İndeksleyici, öğrenci numarasına karşılık gelen öğrenci adını get veya set işlemini gerçekleştirerek geri döndürür veya günceller.
Aşağıdaki kodda Ogrenci sınıfını kullanarak indeksleyiciye örnek bir kullanım gösterelim:
class Program
{
static void Main(string[] args)
{
Ogrenci ogrenci = new Ogrenci();
Console.WriteLine("Öğrenci adı: " + ogrenci[101]); // Ali
ogrenci[101] = "Mehmet";
Console.WriteLine("Öğrenci adı: " + ogrenci[101]); // Mehmet
Console.ReadLine();
}
}
Yukarıdaki kodda, Ogrenci sınıfının bir örneği oluşturulur ve indeksleyici kullanarak öğrenci adına erişilir. Sonra indeksleyici kullanarak öğrenci adı güncellenir ve tekrar öğrenci adı çağrılır.
Indexer kullanımı sadece bir sınıfın öğelerine erişmek için kullanılmaz. Örneğin, bir sınıf içinde bir liste, dizin veya sözlük veri yapısı oluşturulabilir. Bu, sınıfın öğelerine erişmek için kullanılabilir.
Indexer, ayrıca birden çok parametre alan indeksleyiciler de kullanabilir. Örneğin, iki anahtar kelime kullanarak öğeleri erişmek için bir indeksleyici oluşturulabilir. Bu, bir sınıfın öğelerine çok yönlü bir erişim sağlar.
class Kitap
{
private string[] kitapAdi;
private int[] kitapSayfaSayisi;
public Kitap()
{
kitapAdi = new string[3] { "C# Programlama", "Java Programlama", "Python Programlama" };
kitapSayfaSayisi = new int[3] { 400, 600, 500 };
}
public int this[string ad, string ozellik]
{
get
{
int i = 0;
foreach (string kitap in kitapAdi)
{
if (kitap == ad)
{
if (ozellik == "sayfaSayisi")
{
return kitapSayfaSayisi[i];
}
}
i++;
}
return 0;
}
}
}
Yukarıdaki örnekte, Kitap sınıfı iki özelliğe sahip bir indeksleyici kullanır: kitap adı ve özellik. İndeksleyici, “sayfaSayisi” özelliği için kitap adını kullanarak ilgili sayfa sayısını get işlemi ile döndürür.
Sonuç
Indexer, bir sınıfın öğelerine erişmek için son derece kullanışlı bir özelliktir. İndeksleyici, bir sınıfın içindeki öğeleri basitleştirerek, erişimi kolaylaştırır ve okunabilirliği artırır. Indexer kullanarak, sınıfınızı daha iyi organize edebilir ve sınıfın öğelerine daha hızlı ve kolay bir şekilde erişebilirsiniz.
Evet C# ile indexer kullanımı bu şekilde yapılmakta. Tüm C# yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.