Yükleniyor...

Koleksiyon Referansı

C# dilinde Koleksiyon Referansı, verileri yönetmek, depolamak ve işlemek için kullanılan temel veri yapıları ve sınıflar bütünüdür. Geliştiriciler için kritik öneme sahiptir çünkü koleksiyonlar, algoritmaların etkin uygulanmasını sağlar, uygulamaların performansını optimize eder ve kodun sürdürülebilirliğini artırır. C# koleksiyonları arasında List, Dictionary\, Queue, Stack, HashSet ve ObservableCollection gibi yapılandırmalar bulunur. Her biri belirli kullanım senaryolarına uygundur: hızlı erişim, benzersiz eleman saklama veya FIFO/LIFO veri yönetimi gibi.
Koleksiyonları etkin kullanabilmek için generics, interface’ler (IEnumerable, ICollection, IList), LINQ ve nesne yönelimli programlama ilkelerini iyi anlamak gerekir. Bu, doğru koleksiyon tipini seçme, hataları önleme ve performansı artırma açısından kritiktir. Koleksiyonlar, hafıza yönetimi, istisna kontrolü ve uygulama güvenliği gibi konularda da temel rol oynar.
Bu rehber, okuyucuya koleksiyonları doğru şekilde kullanmayı, algoritmaları etkin bir şekilde uygulamayı ve C# projelerinde pratik çözümler geliştirmeyi öğretmeyi amaçlar. Koleksiyonlar, modern yazılım geliştirme süreçlerinde veri yönetiminin merkezindedir ve sistem mimarisinde kritik bir rol oynar.

Temel Örnek

text
TEXT Code
using System;
using System.Collections.Generic;

namespace KoleksiyonReferansi
{
class Program
{
static void Main(string\[] args)
{
// Basit bir string List<T> oluşturma
List<string> meyveler = new List<string> { "Elma", "Muz", "Kiraz" };

// Eleman ekleme
meyveler.Add("Portakal");

// Eleman değiştirme
meyveler[1] = "Mango";

// Listeyi döngü ile yazdırma
Console.WriteLine("Meyve Listesi:");
foreach (string meyve in meyveler)
{
Console.WriteLine(meyve);
}

// Eleman var mı kontrol etme
if (meyveler.Contains("Kiraz"))
{
Console.WriteLine("Kiraz listede mevcut.");
}
}
}

}

Bu örnek, List koleksiyonunun temel kullanımını gösterir. Add metodu ile listeye yeni eleman eklenir; indeks ile eleman değiştirme, mevcut bir öğeyi günceller. foreach döngüsü, listeyi güvenli bir şekilde dolaşmayı sağlar ve indeks hatalarını önler. Contains metodu, bir elemanın varlığını kontrol ederek koşullu mantık sağlar. Bu yapı, stok listeleri, kullanıcı listeleri veya geçici bellek içi veriler için tipik bir uygulama örneğidir. Ayrıca, C#’ın otomatik çöp toplama mekanizması sayesinde bellek sızıntıları minimize edilir ve iyi programlama pratikleri uygulanır.

Pratik Örnek

text
TEXT Code
using System;
using System.Collections.Generic;

namespace KoleksiyonReferansi
{
class Kisi
{
public string Isim { get; set; }
public int Yas { get; set; }
}

class Program
{
static void Main(string[] args)
{
// Dictionary ile benzersiz anahtar kullanımı
Dictionary<int, Kisi> kisiler = new Dictionary<int, Kisi>();

kisiler.Add(1, new Kisi { Isim = "Ayse", Yas = 30 });
kisiler.Add(2, new Kisi { Isim = "Ahmet", Yas = 25 });
kisiler.Add(3, new Kisi { Isim = "Mehmet", Yas = 35 });

// TryGetValue ile güvenli erişim
if (kisiler.TryGetValue(2, out Kisi bulunan))
{
Console.WriteLine($"Bulunan kişi: {bulunan.Isim}, {bulunan.Yas} yaşında");
}

// Dictionary üzerinden döngü ile erişim
foreach (var entry in kisiler)
{
Console.WriteLine($"ID: {entry.Key}, İsim: {entry.Value.Isim}");
}

// Eleman silme
kisiler.Remove(3);
}
}

}

Advanced C# Implementation

text
TEXT Code
using System;
using System.Collections.Generic;
using System.Linq;

namespace KoleksiyonReferansi
{
class Urun
{
public string Ad { get; set; }
public decimal Fiyat { get; set; }
}

class Program
{
static void Main(string[] args)
{
try
{
// HashSet ile benzersiz eleman yönetimi
HashSet<Urun> urunler = new HashSet<Urun>(new UrunKarsilastirici())
{
new Urun { Ad = "Laptop", Fiyat = 1200 },
new Urun { Ad = "Tablet", Fiyat = 450 },
new Urun { Ad = "Laptop", Fiyat = 1200 } // duplicate ignored
};

// LINQ ile filtreleme ve sıralama
var pahaliUrunler = urunler
.Where(u => u.Fiyat > 500)
.OrderByDescending(u => u.Fiyat)
.ToList();

foreach (var u in pahaliUrunler)
{
Console.WriteLine($"Ürün: {u.Ad}, Fiyat: {u.Fiyat}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Hata: {ex.Message}");
}
}
}

class UrunKarsilastirici : IEqualityComparer<Urun>
{
public bool Equals(Urun x, Urun y)
{
return x.Ad == y.Ad && x.Fiyat == y.Fiyat;
}

public int GetHashCode(Urun obj)
{
return obj.Ad.GetHashCode() ^ obj.Fiyat.GetHashCode();
}
}

}

Gelişmiş örnekler, Dictionary\ ile hızlı erişim, HashSet ile benzersiz eleman yönetimi ve LINQ ile verilerin filtrelenmesini göstermektedir. UrunKarsilastirici sınıfı, özelleştirilmiş eşitlik kontrolü sağlar. En iyi uygulamalar arasında istisna yönetimi, generics kullanımı ve LINQ optimizasyonu bulunur. List, Dictionary\ ve HashSet koleksiyonlarının uygun seçimi, performans ve doğruluk açısından kritik öneme sahiptir.

C# koleksiyonları için en iyi uygulamalar; generics kullanımı, doğru veri yapısını seçme, foreach ile güvenli döngü, gereksiz döngüleri minimize etme ve istisna yönetimidir. Bellek sızıntısını önlemek için gereksiz referanslar kaldırılmalı ve büyük koleksiyonlarda performans izlenmelidir. Çoklu iş parçacığı ortamında Concurrent koleksiyonlar güvenli kullanım sağlar. LINQ ile verileri optimize etmek ve özel karşılaştırıcılar kullanmak performansı artırır. Güvenlik açısından, verilerin doğrulanması ve paylaşılan koleksiyonların güvenliği sağlanmalıdır.

📊 Kapsamlı Referans

C# Element/Method Description Syntax Example Notes
List<T> Dinamik sıralı liste List<int> sayilar = new List<int>(); sayilar.Add(10); İndeks ile erişim, otomatik boyut ayarlama
List<T>.Add() Eleman ekleme sayilar.Add(10); sayilar.Add(5); Ortalama O(1)
List<T>.Remove() Eleman silme sayilar.Remove(10); sayilar.Remove(5); Başarılı ise true döner
List<T>.Contains() Eleman var mı kontrol sayilar.Contains(10); bool varMi = sayilar.Contains(5); Doğrusal arama
List<T>.Count Eleman sayısı sayilar.Count int toplam = sayilar.Count; Otomatik güncellenir
Dictionary\<TKey,TValue> Anahtar-değer çiftleri Dictionary\<int,string> dict = new Dictionary\<int,string>(); dict.Add(1,"Ayşe"); Anahtarla hızlı erişim
Dictionary\<TKey,TValue>.Add() Anahtar-değer ekleme dict.Add(1,"Ayşe"); dict.Add(2,"Ahmet"); Anahtar var ise hata
Dictionary\<TKey,TValue>.TryGetValue() Güvenli erişim dict.TryGetValue(2,out string val); bool bulundu = dict.TryGetValue(1,out string isim); Hata önleyici
Dictionary\<TKey,TValue>.Remove() Anahtar-değer silme dict.Remove(1); dict.Remove(2); Başarılı ise true döner
Dictionary\<TKey,TValue>.Keys Anahtar koleksiyonu var keys = dict.Keys; foreach(var key in dict.Keys) Sadece okunur
Dictionary\<TKey,TValue>.Values Değer koleksiyonu var values = dict.Values; foreach(var val in dict.Values) Sadece okunur
Queue<T> FIFO kuyruk Queue<int> q = new Queue<int>(); q.Enqueue(10); İlk giren, ilk çıkar
Queue<T>.Enqueue() Eleman ekleme q.Enqueue(10); q.Enqueue(20) O(1)
Queue<T>.Dequeue() İlk elemanı çıkarma q.Dequeue(); int ilk = q.Dequeue(); Boşsa hata
Queue<T>.Peek() İlk elemanı görme q.Peek(); int peek = q.Peek(); Boşsa hata
Stack<T> LIFO yığın Stack<int> s = new Stack<int>(); s.Push(10); Son giren, ilk çıkar
Stack<T>.Push() Eleman ekleme s.Push(10); s.Push(20) O(1)
Stack<T>.Pop() Üst elemanı çıkarma s.Pop(); int ust = s.Pop(); O(1), boşsa hata
Stack<T>.Peek() Üst elemanı görme s.Peek(); int ust = s.Peek(); Boşsa hata
HashSet<T> Benzersiz eleman HashSet<int> hs = new HashSet<int>(); hs.Add(10); Duplicate önler
HashSet<T>.Add() Benzersiz ekleme hs.Add(10); hs.Add(5); True ise eklendi
HashSet<T>.Remove() Eleman silme hs.Remove(10); hs.Remove(5); True ise silindi
ObservableCollection<T> Gözlemlenebilir koleksiyon ObservableCollection<string> oc = new ObservableCollection<string>(); oc.Add("Item"); UI değişikliklerini bildirir
ConcurrentDictionary\<TKey,TValue> Eşzamanlı sözlük ConcurrentDictionary\<int,string> cd = new ConcurrentDictionary\<int,string>(); cd
ConcurrentQueue<T> Eşzamanlı kuyruk ConcurrentQueue<int> cq = new ConcurrentQueue<int>(); cq.TryDequeue(out int val); Çoklu iş parçacığı güvenli
ConcurrentStack<T> Eşzamanlı yığın ConcurrentStack<int> cs = new ConcurrentStack<int>(); cs.TryPop(out int val); Çoklu iş parçacığı güvenli

📊 Complete C# Properties Reference

Property Values Default Description C# Support
Count int 0 Eleman sayısı Tüm koleksiyonlar
Capacity int Değişken Büyümeden önce kapasite List<T>, ArrayList
IsReadOnly bool false Salt okunur ICollection<T>, IList<T>
Keys TKey Koleksiyonu N/A Anahtar koleksiyonu Dictionary\<TKey,TValue>
Values TValue Koleksiyonu N/A Değer koleksiyonu Dictionary\<TKey,TValue>
Comparer IEqualityComparer Varsayılan Eleman karşılaştırıcı HashSet<T>, Dictionary\<TKey,TValue>
SyncRoot object null Senkronizasyon nesnesi ICollection
IsSynchronized bool false Çoklu iş parçacığı güvenliği ICollection
CollectionChanged Event N/A Koleksiyon değişim olayı ObservableCollection<T>
CapacityChanged Event N/A Kapasite değişim olayı List<T>
Comparer IComparer Varsayılan SortedList/SortedDictionary karşılaştırıcı SortedList\<TKey,TValue>, SortedDictionary\<TKey,TValue>

C# Koleksiyon Referansı, geliştiricilere veri yönetiminde güçlü ve esnek araçlar sunar. List, Dictionary\, Queue, Stack, HashSet gibi temel yapıların kullanımı, uygulamaların performansını ve güvenilirliğini artırır. Generics, LINQ ve exception handling gibi ileri teknikler, koleksiyonların daha verimli ve güvenli kullanımını sağlar. Bir sonraki adımlar arasında ObservableCollection, eşzamanlı koleksiyonlar ve LINQ optimizasyonları öğrenilebilir. Kaynak olarak resmi dokümantasyon, açık kaynak projeler ve ileri C# eğitimleri önerilir.

🧠 Bilginizi Test Edin

Başlamaya Hazır

Test Your Knowledge

Test your understanding of this topic with practical questions.

4
Sorular
🎯
70%
Geçmek İçin
♾️
Süre
🔄
Deneme

📝 Talimatlar

  • Her soruyu dikkatle okuyun
  • Her soru için en iyi cevabı seçin
  • Quiz'i istediğiniz kadar tekrar alabilirsiniz
  • İlerlemeniz üstte gösterilecek