Generic Türler (Generic Types) -III [Generic Koleksiyon Sınıfları]

.NET 2.0 ile birlikte nongeneric koleksiyonların generic versiyonları çıkarıldığı gibi yeni koleksiyon sınıfları da geliştirildi. Aşağıdaki tabloda yeni nesil generic sınıfları ve bunlara karşılık gelen klasik koleksiyon sınıfları gösterilmiştir.

System.Collections.Generic System.Collections
Comparer Comparer
Dictionary

HashTable
LinkedList
List ArrayList
Queue Queue
SortedDictionary SortedList
Stack Stack
ICollection ICollection
IComparable System.IComparable
IDictionary IDictionary
IEnumerable IEnumerable
IEnumerator IEnumerator
IList IList

Nesnelerin yanındaki argüman kısaltmalarından T, type, K, key ve V de value ifadesini temsil etmektedir.
Bu nesnelerin kullanımı, nongeneric versiyonlarından hiçbir farkı bulunmamaktadır. Aşağıdaki tabloda generic bir Dictionary nesnesinin kullanımı gösterilmiştir;

Imports System
Imports System.Collections.Generic

Module Module1
Sub Main()
Dim Kisiler As New Dictionary(Of String, Kisi)()
Kisiler.Add("K1", New Kisi("Ali", 10))
Kisiler.Add("K2", New Kisi("Veli", 17))
Kisiler.Add("K3", New Kisi("Mert", 19))

'Key değeri K3 olan kişinin bilgileri
Console.WriteLine("{0} " {1}", Kisiler("K3").AdSoyad, Kisiler("K3").Yas)
Console.ReadLine()
End Sub

Private Class Kisi
Public AdSoyad As String
Public Yas As Integer

Public Sub New(ByVal strAdSoyad As String, ByVal intYas As Integer)
    AdSoyad = strAdSoyad
    Yas = intYas
End Sub
End Class

End Module

using System;
using System.Collections.Generic;

class Program
{
static void Main(){
Dictionary
Mert » 19
Koleksiyon nesnelerini sıralamak için kullandığımız IComparable arabirimi de generic yapıyı destekler.

Imports System
Imports System.Collections.Generic

Module Module1

Sub Main()
Dim Kisiler As New List(Of Kisi)()
Kisiler.Add(New Kisi("Ali", 10))
Kisiler.Add(New Kisi("Veli", 17))
Kisiler.Add(New Kisi("Mert", 19))

Console.WriteLine("Sıralama yapılmadan önce")

For Each oKisi As Kisi In Kisiler
    Console.WriteLine("   " & oKisi.ToString())
Next
Console.WriteLine()

'Listeyi sırala
Kisiler.Sort()

Console.WriteLine("Sıralama yapıldıktan sonra")
For Each oKisi As Kisi In Kisiler
    Console.WriteLine("   " & oKisi.ToString())
Next

End Sub

'Sıralama işlemini desteklemesi için IComparable implement edelim
Class Kisi
Implements IComparable(Of Kisi)
Public AdSoyad As String
Public Yas As Integer

Public Sub New(ByVal strAdSoyad As String, ByVal intYas As Integer)
    AdSoyad = strAdSoyad
    Yas = intYas
End Sub

Public Overloads Overrides Function ToString() As String
    Return String.Format("{0} {1} yaşında", AdSoyad, Yas)
End Function

Public Function CompareTo(ByVal Obj As Kisi) As Integer Implements IComparable(Of Kisi).CompareTo
    Return AdSoyad.CompareTo(Obj.AdSoyad)
End Function
End Class

End Module

using System;
using System.Collections.Generic;

class Program
{
static void Main(){
List
Sıralama yapılmadan önce
Ali 10 yaşında
Veli 17 yaşında
Mert 19 yaşında
Sıralama yapıldıktan sonra
Ali 10 yaşında
Mert 19 yaşında
Veli 17 yaşında

Aynı mantıkla, stack, queue, sortedlist, inumerator, icomparer gibi class ve arabirimleri kullanabiliriz. Şimdi kendimiz bir generic koleksiyon sınıf hazırlayalım. Stack gibi çalışacak bu koleksiyona ekleme ve çıkarma işlemleri yapabilmek için AddItem() ve GetItem() metodlarını tanımlayacağız. GetItem() metodu, üstteki elemanı döndürecek ve daha sonra listeden çıkaracak. Burada dikkat etmemiz gereken nokta, C# tarafında listede herhangi bir eleman yoksa GetItem() metodu, liste türünün default değerini döndürür.
Imports System
Imports System.Collections.Generic

Module Module1

Sub Main()
Dim oLst As New Liste(Of String)()
oLst.AddItem(“Ankara”)
oLst.AddItem(“İzmir”)
oLst.AddItem(“İstanbul”)

‘Listenin ilk elemanını okuyalım.
Console.WriteLine(“1. Item : {0}”, oLst.GetItem())
Console.WriteLine(“2. Item : {0}”, oLst.GetItem())
Console.WriteLine(“3. Item : {0}”, oLst.GetItem())
‘Olmayan elemanını okuyacağız.
‘GetItem() içerisinde item=Nothing yapmasaydık hata alırdık.
Console.WriteLine(“4. Item : {0}”, oLst.GetItem())
End Sub

Public Class Liste(Of T)
Private items As New List(Of T)()

Public Sub AddItem(ByVal item As T)
items.Add(item)
End Sub

Public Function GetItem() As T
Dim item As T = Nothing

If items.Count
using System;
using System.Collections.Generic;

class Program
{
static void Main(){
Liste
1. Item : Ankara
2. Item : İzmir
3. Item : İstanbul
4. Item :

Generic Türler (Generic Types) -III [Generic Koleksiyon Sınıfları]” üzerine bir düşünce

  1. Latif OZTURK

    Merhaba,
    Bir sorum olacakti.
    Yukarudaki kodda Console.WriteLine(” ” + oKisi); demissiniz fakat override ettiginiz ToString()’ i cagirmadiginiz halde yukaridaki ciktiyi almamiz mumkun mu?Not : VB.Net tarafinda cagirilmis.
    Iyi calismalar.

    Cevapla
  2. Ahmet Kaymaz Yazar

    Merhaba Latif,Console.WriteLine(oKisi) ifadesi otomatik olarak System.Object sınıfından gelen ToString() yordamını çağırır.

    Cevapla

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Time limit is exhausted. Please reload CAPTCHA.