Anasayfa / C# WINDOWS FORM / C# Windows Form’da Koleksiyonlar (Collections)

C# Windows Form’da Koleksiyonlar (Collections)

C# ve Windows Forms ile yazılım geliştirirken, birden fazla veriyi aynı anda hafızada tutmamız gereken durumlarla sıkça karşılaşırız. Önceki konularda bu işlem için dizileri (arrays) kullanmayı öğrenmiştik. Ancak dizilerin bazı kısıtlamaları vardır: Dizilerin eleman sayısı başlangıçta belirlenmek zorundadır ve daha sonradan değiştirilemez. Ayrıca diziler sadece tek bir veri tipindeki (örneğin sadece int veya sadece string) değerleri saklayabilir.

C# WINDOWS FORM KOLEKSİYONLAR EĞİTİM VİDEOMUZ İÇİN TIKLAYIN

Eğer programınızda kaç adet veri saklayacağınızı başlangıçta bilmiyorsanız veya farklı türdeki verileri aynı yapıda tutmak istiyorsanız, Nesne Tabanlı Programlama size harika bir çözüm sunar: Koleksiyonlar (Collections).

Bu kapsamlı rehberde, C# dilinde koleksiyonların ne olduğunu, dizilerden farklarını ve Windows Forms uygulamalarında en sık kullanılan koleksiyon türlerini (ArrayList, List, Queue, Stack, Dictionary) pratik örneklerle öğreneceksiniz.

Dizi (Array) ve Koleksiyon (Collection) Arasındaki Farklar

Hangi durumlarda dizi, hangi durumlarda koleksiyon kullanmalıyız? Temel farklar şunlardır:

  • Boyut Esnekliği: Dizilerin eleman sayıları sabittir, baştan belirlenir; koleksiyonların eleman sayıları ise dinamiktir, ihtiyaca göre sonradan artırılabilir veya azaltılabilir.
  • Veri Tipi: Diziler sadece aynı tip verileri saklarken, bazı koleksiyon türleri (non-generic olanlar) farklı tipteki verileri aynı anda saklayabilir.
  • Performans ve Bellek: Diziler boyutları sabit olduğu için performans açısından koleksiyonlardan daha hızlıdır, ancak esnek veri yönetimi gerektiren durumlarda bellek açısından koleksiyonların kullanılması daha çok tavsiye edilir.
  • Hazır Metotlar: Koleksiyonlar, içindeki elemanlar üzerinde işlem yapmak (ekleme, silme, arama vb.) için dizilerden çok daha fazla hazır metoda sahiptir.

Koleksiyonları projemizde kullanabilmek için kod sayfamızın en üstüne using System.Collections; isim uzayını (namespace) eklememiz gerekir.

Boxing (Kutulama) ve Unboxing (Kutu Açma) Nedir?

Koleksiyonların çalışma mantığını anlamak için bu iki terimi bilmek önemlidir. C# dilinde değer tipleri (int, char, double vb.) belleğin Stack (Yığın) kısmında tutulurken, referans tipleri (object, class vb.) belleğin Heap (Öbek) kısmında tutulur.

  • Boxing (Kutulama): Herhangi bir değer tipindeki değişkenin nesne (object) tipine dönüştürülmesine denir.
  • Unboxing (Kutu Açma): Nesne (object) tipindeki değişkenin tekrar değer (value) tipine dönüştürülmesidir. Dönüştürme işleminde veri tipleri eşleşmezse program hata verecektir.

En Sık Kullanılan Koleksiyon Türleri ve Form Örnekleri

C# dilinde ihtiyacınıza göre kullanabileceğiniz birçok hazır koleksiyon sınıfı vardır. En önemlilerini inceleyelim:

1. ArrayList Koleksiyonu

ArrayList, dizilere çok benzeyen ancak eleman sayısı dinamik olarak değişebilen ve farklı tiplerde veri saklama imkânı sunan bir koleksiyondur. ArrayList içine eklenen elemanlar object (nesne) tipinde algılanır, bu nedenle veriler eklenirken boxing, veriler okunurken unboxing işlemi yapılır.

ArrayList Metotları:

  • Add(veri): Koleksiyonun sonuna yeni bir eleman ekler.
  • Insert(index, veri): Belirtilen index (sıra) numarasına veriyi araya ekler.
  • Remove(veri): Belirtilen değere sahip veriyi bulup siler.
  • RemoveAt(index): Belirtilen sıra numarasındaki veriyi siler.
  • Clear(): Koleksiyonun içindeki tüm verileri temizler.
  • Contains(veri): Aranan veri koleksiyonda varsa true, yoksa false döndürür.
  • Sort(): Koleksiyon içindeki verileri küçükten büyüğe veya A’dan Z’ye sıralar.
  • Reverse(): Koleksiyon sıralamasını tamamen tersine çevirir.

Windows Form Örneği: ArrayList Kullanımı Forma bir TextBox, bir Buton ve bir ListBox ekleyelim. Butona tıklandığında TextBox’taki şehir ismini ArrayList’e kaydedip listeleyelim:

using System.Collections; // En üste eklenmeli

// Global ArrayList tanımı
ArrayList sehirler = new ArrayList();

private void btnEkle_Click(object sender, EventArgs e)
{
    // TextBox'tan gelen veriyi koleksiyona ekliyoruz
    sehirler.Add(txtSehirAdi.Text);

    // Listeyi temizleyip güncel hâlini ListBox'a aktarıyoruz
    listBox1.Items.Clear();
    for (int i = 0; i < sehirler.Count; i++)
    {
        listBox1.Items.Add(sehirler[i]);
    }
}

2. List Koleksiyonu

List, ArrayList koleksiyonunun daha güvenli ve modern hâlidir. İkisi arasındaki en büyük fark; List koleksiyonunun generic (jenerik), ArrayList koleksiyonunun ise non-generic yapıda olmasıdır. List koleksiyonunu kullanırken içine hangi tür verinin (örneğin sadece int veya sadece string) ekleneceğini baştan belirtmeniz gerekir. Belirlenen tipin dışında bir veri eklenmeye çalışıldığında derleyici hata verir. Bu durum programın güvenliğini artırırken, boxing ve unboxing işlemlerine gerek kalmadığı için List koleksiyonunun ArrayList‘e göre çok daha hızlı ve performanslı çalışmasını sağlar.

Tanımlama Örneği:

List<int> numaralar = new List<int>(); // Sadece tam sayı alan liste
List<string> adSoyadlar = new List<string>(); // Sadece metin alan liste

3. Queue (Kuyruk) Koleksiyonu

Adından da anlaşılacağı üzere günlük hayattaki bilet, banka veya fatura kuyruklarıyla aynı mantıkta çalışır. İlk giren ilk çıkar (FIFO – First In First Out) prensibiyle çalışır. Bir eleman çıkartılmak istendiğinde kuyruğa en ilk eklenen eleman çıkartılır, yeni eklenen eleman ise kuyruğun en sonuna dahil olur.

  • Enqueue(veri): Kuyruğun sonuna bir eleman ekler.
  • Dequeue(): Kuyruğun en başındaki elemanı çıkarır ve okur.

4. Stack (Yığın) Koleksiyonu

Stack (Yığın) ise kuyruk mantığının tam tersidir. Son giren ilk çıkar (LIFO – Last In First Out) prensibiyle çalışır. Günlük hayatta üst üste dizilmiş tabaklar veya bilgisayar programlarındaki “Geri Al” (Undo) özelliği bu mantıkla çalışır. Son yaptığınız işlem yığının en üstündedir ve geri al dediğinizde önce o çıkarılır.

  • Push(veri): Yığına yeni bir değer ekler.
  • Pop(): Yığının en üstündeki (en son eklenen) değeri çıkarır.

5. Dictionary (Sözlük) Koleksiyonu

Normal dizilerde veya ArrayList’lerde verilere ulaşmak için 0, 1, 2 gibi index (sıra) numaralarını kullanırız. Dictionary koleksiyonunda ise index numarası yerine Anahtar (Key) – Değer (Value) ilişkisi kullanılır. Eklenen her değerin kendine ait benzersiz (unique) bir anahtarı olmalıdır.

Örneğin; bir okuldaki öğrencilerin numaralarını (Anahtar) ve isimlerini (Değer) eşleştirmek için mükemmel bir yapıdır.

Windows Form Örneği: Dictionary Kullanımı

// Key olarak okul numarası (int), Value olarak Ad Soyad (string) kullanıyoruz
Dictionary<int, string> ogrenciler = new Dictionary<int, string>();

private void btnEkle_Click(object sender, EventArgs e)
{
    int okulNo = int.Parse(txtOkulNo.Text);
    string adSoyad = txtAdSoyad.Text;

    // Benzersiz numara ve isimi koleksiyona ekliyoruz
    ogrenciler.Add(okulNo, adSoyad);

    MessageBox.Show("Öğrenci başarıyla eklendi!");
}

private void btnAra_Click(object sender, EventArgs e)
{
    int arananNo = int.Parse(txtOkulNo.Text);

    // ContainsKey metodu ile bu anahtara sahip biri var mı kontrol ediyoruz
    if(ogrenciler.ContainsKey(arananNo))
    {
        // Varsa değerini (ismini) ekrana yazdırıyoruz
        MessageBox.Show("Öğrenci Bulundu: " + ogrenciler[arananNo]);
    }
    else
    {
        MessageBox.Show("Öğrenci Kayıtlı Değildir.");
    }
}

Ek Bilgi: Dictionary’ye benzeyen diğer yapılar Hashtable ve SortedList‘tir. Hashtable veri tipleri belirtilmeden çalışırken, SortedList ise eklenen verileri anahtarın (Key) içeriğine göre otomatik olarak küçükten büyüğe sıralayarak depolar.

Özet

C# ve Windows Forms teknolojisinde verilerinizi esnek, performanslı ve hatasız şekilde yönetmek için koleksiyonlar vazgeçilmez araçlardır. Karışık ve türü değişebilen veriler için ArrayList veya Hashtable, yüksek performans ve tip güvenliği için List<T>, anahtar-değer eşleşmeleri için Dictionary, özel sıralama kuralları olan işlemler içinse Stack ve Queue kullanmayı alışkanlık hâline getirmelisiniz. Kendi projelerinizi açıp listelere butonlarla veriler eklemeyi ve silmeyi deneyerek bu konuyu çok daha kalıcı şekilde öğrenebilirsiniz. İyi kodlamalar dileriz!

Etiketlendi:

Cevap bırakın

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

DERSLER