Generics: Tip Güvenliği Sağlayan Esnek Sınıflar ve Metotlar

crazy_coder

Moderatör
Katılım
20 Şub 2026
Mesajlar
204
Tepkime puanı
0
Puanları
16

C# Generics Rehberi: Tip Güvenliği ve Maksimum Performans​


Generics, bir metodun veya sınıfın üzerinde çalışacağı veri tipini, kod yazılırken değil, kod çalıştırılırken belirlememizi sağlayan bir yapıdır. <T> sembolü ile ifade edilir.



1. Neden Generics Kullanmalıyız?​


Generics öncesinde (C# 2.0 öncesi), her türlü veriyi kabul etmek için object tipi kullanılıyordu. Ancak object kullanımı iki büyük sorun yaratır:


  • []Tip Güvenliği Yoktur: Bir listeye int beklerken yanlışlıkla string atarsanız, hata derleme zamanında değil, uygulama çalışırken (Runtime) ortaya çıkar ve çökmeye sebep olur.
    []Performans Kaybı (Boxing): Değer tiplerinin sürekli object'e dönüştürülmesi belleği ve işlemciyi yorar.

C#:
// Generic Olmayan Liste (Eski)
ArrayList liste = new ArrayList();
liste.Add(5);
liste.Add("Merhaba"); // Hata vermez ama risklidir!

// Generic Liste (Yeni ve Güvenli)
List<int> rakamlar = new List<int>();
rakamlar.Add(10);
// rakamlar.Add("Selam"); // DERLEME HATASI! (Güvenli)



2. Generic Metotlar​


Farklı veri tipleriyle aynı mantığı yürüten metotlar yazmak için kullanılır.

C#:
public void Yazdir<T>(T veri)
{
Console.WriteLine($"Gelen Veri: {veri}");
}

// Kullanım:
Yazdir<string>("C# Öğreniyorum");
Yazdir<int>(100);



3. Generic Sınıflar​


Özellikle veri saklama ve yönetme süreçlerinde (Repository Pattern gibi) çok sık kullanılır.

C#:
public class Depo<T>
{
private T _icerik;

public void Ekle(T yeniIcerik) => _icerik = yeniIcerik;
public T Getir() => _icerik;

}

// Kullanım:
Depo<int> sayiDeposu = new Depo<int>();
sayiDeposu.Ekle(42);

Depo<string> metinDeposu = new Depo<string>();
metinDeposu.Ekle("Generic Sınıf");



4. Generic Constraints (Kısıtlamalar)​


Bazen <T> tipinin "her şey" olmasını istemezsiniz. Örneğin, sadece bir class olsun veya sadece new() yapılabilir (parametresiz constructor'ı olan) bir tip olsun diyebilirsiniz. Buna where anahtar kelimesiyle kısıtlama denir.

C#:
// Sadece sınıfları (referans tiplerini) kabul eden bir yapı
public class VeriYonetici<T> where T : class, new()
{
public T NesneOlustur() => new T();
}

KısıtlamaAnlamı
where T : classT sadece referans tipi olabilir.
where T : structT sadece değer tipi (int, bool vb.) olabilir.
where T : new()T'nin parametresiz bir yapıcı metodu olmalı.
where T : IsimT sadece 'Isim' sınıfından veya arayüzünden türemiş olmalı.



Sonuç​


Generics, C# dilinin "temiz ve esnek kod" vizyonunun temelidir. Aynı kod bloğunu yüzlerce farklı veri tipi için tekrar tekrar yazmaktan kurtarır, belleği korur ve en önemlisi hataları daha kod yazım aşamasında yakalamanızı sağlar. Modern C# kütüphanelerinin neredeyse tamamı bu yapı üzerine kuruludur.
 
Geri
Üst