Bir kutu düşün. Bazen içine elma koyarsın, bazen kalem, bazen kitap. Kutunun kendisi değişmez — sadece içindeki değişir.
Generic de tam böyle çalışır. Aynı kodu farklı tipler için tekrar yazmak yerine, tipi dışarıdan parametre olarak alırsın.
Generic olmadan aynı işi int için de, string için de, başka bir tip için de ayrı ayrı yazmak gerekir. Bu hem tekrar hem de hata riskidir.
Generic yapılar tip güvenliğini korurken kodu yeniden kullanılabilir kılar.
public T IlkElemaniGetir<T>(List<T> liste)
{
if (liste.Count == 0)
throw new InvalidOperationException("Liste boş.");
return liste[0];
}
// Kullanım:
var sayilar = new List<int> { 10, 20, 30 };
var isimler = new List<string> { "Ali", "Veli", "Ayşe" };
Console.WriteLine(IlkElemaniGetir(sayilar)); // 10
Console.WriteLine(IlkElemaniGetir(isimler)); // Ali
Zaten kullandığın List<T> ve Dictionary<TKey, TValue> birer generic sınıftır. Kendi generic sınıfını da yazabilirsin.
public class Kutu<T>
{
private T _icerik;
public void Koy(T nesne)
{
_icerik = nesne;
}
public T Al()
{
return _icerik;
}
}
// Kullanım:
var elmaliKutu = new Kutu<string>();
elmaliKutu.Koy("Elma");
Console.WriteLine(elmaliKutu.Al()); // Elma
var sayiKutu = new Kutu<int>();
sayiKutu.Koy(42);
Console.WriteLine(sayiKutu.Al()); // 42