.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 |
DictionaryHashTable |
|
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 :
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.
Merhaba Latif,Console.WriteLine(oKisi) ifadesi otomatik olarak System.Object sınıfından gelen ToString() yordamını çağırır.