Koleksiyon Arayüzleri (Collection Interfaces)
Hiyerarşi
IEnumerable<T>
├── ICollection<T>
│ ├── IList<T>
│ ├── ISet<T>
│ └── IDictionary<TKey, TValue>
├── IQueryable<T>
├── IReadOnlyCollection<T>
│ ├── IReadOnlyList<T>
│ └── IReadOnlyDictionary<TKey, TValue>
└── IAsyncEnumerable<T>
IEnumerator<T> => Sadece veri okumak için kullanılır. Ekleme, silme, update işlemleri için uygun değildir.
IEnumerator<T>
Örnek:
IEnumerable<int> sayilar = new List<int> { 1, 2, 3, 4 };
foreach (var s in sayilar)
{
Console.WriteLine(s);
}
ICollection<T>
Açıklama: Ekleme, silme, sayma işlemleri için kullanılır.
Örnek:
ICollection<string> isimler = new List<string>();
isimler.Add("Ali");
isimler.Add("Ayşe");
Console.WriteLine(isimler.Count); // 2
isimler.Remove("Ali");
IList<T>
Açıklama: İndeks üzeri erişim sağlar (myList[0] gibi).
Örnek:
IList<string> liste = new List<string> { "Elma", "Armut", "Kiraz" };
Console.WriteLine(liste[1]); // Armut
liste[1] = "Muz"; // Güncelleme
IReadOnlyCollection<T>
Açıklama: Set olması sadece get ile veri çekmek için uygun koleksiyondur.
Örnek:
public IReadOnlyCollection<string> GetCities()
{
return new List<string> { "Ankara", "İzmir", "Bursa" };
}
IReadOnlyList<T>
Açıklama: Set olması sadece get ile veri çekmek ve indekli veri erişiminde kullanılır.
Örnek:
IReadOnlyList<int> sayilar = new List<int> { 10, 20, 30 };
Console.WriteLine(sayilar[2]); // 30
IQueryable<T>
Açıklama: Veritabanında LINQ sorguları yazıp veri tabanında çevirmek için kullanılır.
Örnek:
IQueryable<User> users = dbContext.Users.Where(u => u.Age > 18);
IDictionary<TKey, TValue>
Açıklama: Veriyi anahtar-değer (key-value) çifti şeklinde tutar.
Örnek:
IDictionary<string, int> notlar = new Dictionary<string, int>();
notlar["Ali"] = 85;
notlar["Ayşe"] = 90;
Console.WriteLine(notlar["Ayşe"]); // 90
IReadOnlyDictionary<TKey, TValue>
Açıklama: Dışarıya anahtar-değer verisini sadece çekilecek.
Örnek:
public IReadOnlyDictionary<string, int> GetScores()
{
return new Dictionary<string, int> { ["Ali"] = 90, ["Ayşe"] = 85 };
}
ISet<T>
Açıklama: Tekrarlanan verileri saymadığı veriyi çeker.
Örnek:
ISet<int> sayilar = new HashSet<int> { 1, 2, 2, 3 };
Console.WriteLine(sayilar.Count); // 3 (çünkü 2 bir kez sayılır)
IAsyncEnumerable<T>
Açıklama: Asenkron şekilde verileri çeker. Ekleme, silme, güncelleme yapmaz.
Örnek:
await foreach (var item in GetDataAsync())
{
Console.WriteLine(item);
}
async IAsyncEnumerable<int> GetDataAsync()
{
for (int i = 1; i <= 3; i++)
{
await Task.Delay(500);
yield return i;
}
}
IObservable<T>
Açıklama: Bir tetikleyicinin tetiklendikten sonra yapılması gereken işleri sağlayan.
Örnek:
IObservable<int> numbers = Observable.Range(1, 5);
numbers.Subscribe(x => Console.WriteLine($"Alındı: {x}"));
IEnumerator<T>
Açıklama: foreach döngüsünün altında çalışan gezici (iterator) mantığı.
