Visual Basic'te koleksiyonlar, bir değişkende bir grup nesne veya değer saklamak için gereklidir. Collection, ArrayList ve genel List(Of T) gibi standart koleksiyonlar, elemanlara erişim, ekleme ve silme için farklı yöntemler sağlar ve tür güvenliği, performans ve olanaklar bakımından farklılık gösterir.
Klasik VB6'da yalnızca türlendirilmiş Collection koleksiyonu vardı. .NET ile daha güçlü yapılar, ArrayList (katı tür güvenliği olmayan eski evrensel tür) ve .NET 2.0'da ortaya çıkan modern genel koleksiyonlar (Generic Collections) gibi yapılar ortaya çıktı.
Ana zorluk, projedeki görevler için uygun koleksiyonu seçmektir. Katı tür güvenliği olmayan koleksiyonlar (ArrayList, Collection), çalışma zamanında hatalara veya performans sorunlarına yol açabilir. Genel koleksiyonlar parametreleme gerektirir, ancak türlerle çalışmada maksimum güvenlik ve kolaylık sunar.
Eski Collection koleksiyonunu yalnızca eski kodla etkileşim için kullanın, yeni projelerde List(Of T)'yi tercih edin. ArrayList, eleman türü hakkında bilgi olmadığında yararlı olabilir, ancak bunun için List(Of Object) veya diğer genel koleksiyonları kullanmak daha iyidir.
Kod örneği:
' Collection Dim coll As New Collection() coll.Add("Hello") c.Add(123) ' ArrayList Dim arr As New ArrayList() arr.Add("World") arr.Add(456) ' List(Of T) Dim list As New List(Of Integer)() list.Add(789) list.Add(101112)
Anahtar özellikler:
Collection ile bir dizi arasındaki fark nedir?
Dizi, başlatıldığında boyutunu sabitler, tek bir türdeki elemanları saklar ve indeksle hızlı erişim destekler. Koleksiyon dinamik olarak büyür, farklı türde nesneleri saklayabilir ve anahtar ile erişimi destekler (ancak VB6'da indekslenemez).
Collection'a zaten var olan bir anahtarla bir nesne eklemeye çalışırsak ne olur?
Zaten mevcut olan bir anahtar ile eleman eklemeye çalışmak, "Key already exists in collection" çalışma zamanı hatasına neden olur.
Dim c As New Collection() c.Add("one", "a") c.Add("two", "a") ' Hata
ArrayList'i standart bir şekilde List(Of T) türüne dönüştürebilir miyiz?
Hayır, normal dönüşüm mümkün değildir — yeni bir List(Of T) manuel olarak oluşturmak ve uygun elemanları kopyalamak zorundasınız, aksi takdirde ArrayList'in katı tür güvenliği olmayan yapısından kaynaklanan çalışma zamanı hataları ortaya çıkar.
Müşteri saklamak için bir projede ArrayList kullanıldı, yanlışlıkla bir dize yerine Client nesnesi eklendi. İşleme aşamasında, izlenmesi zor bir tür dönüştürme hatası ortaya çıkıyor.
Artıları:
Eksileri:
Katı türlendirilmiş List(Of Client) kullanılıyor, tüm kod Strict On seçeneği ile derleniyor. Hatalar derleme aşamasında tespit ediliyor, yapı LINQ ile yeni yöntemlerle kolayca genişletiliyor.
Artıları:
Eksileri: