|
Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
De namespace System.Collections.ObjectModel voorziet ons ook in een generieke template voor het creëren van typesafe dictionarytypes, namelijk KeyedCollection(Of TKey, TItem). Dit dictionary type is geschikt voor elementen waarvan de key onderdeel is van de value.
Deze is een abstracte klasse ( MustInherit ), waarvan men dus niet rechtstreeks de members kan gebruiken, maar waarvan eerst een afgeleide wordt gemaakt.
Een concrete afgeleide klasse moet op zijn minst een implementatie voorzien voor de GetKeyForItem(item As TItem) As TKey) method (1). Deze bepaald hoe de keywaarde van een item wordt opgehaald. Door deze implementatie is het bijvoorbeeld niet meer noodzakelijk bij het toevoegen van een element ( via de Add(item As TItem) method (2) ) een keywaarde te voorzien, wat typisch zou zijn voor een dictionary type. Visual Basic 2010 Broncode Public Class Person Private m_Name As String Public Property Name() As String Get Name = m_Name End Get Set( ByVal value As String) m_Name = value End Set End PropertyEnd ClassPublic Class PersonsDictionary Inherits System.Collections.ObjectModel. KeyedCollection( Of String, Person) Protected Overrides Function GetKeyForItem( ByVal item As Person) As String GetKeyForItem = item.Name End FunctionEnd ClassPublic Class KeyedCollectionOfTKeyTItemExample Public Shared Sub Main() Dim person1 As New Person With {.Name = "John"} Dim person2 As New Person With {.Name = "Jane"} Dim persons1 As New PersonsDictionary persons1.Add(person1) persons1.Add(person2) Console.WriteLine(persons1.Item(0).Name) Console.WriteLine(persons1.Item( "John").Name) Console.WriteLine(persons1.Item(1).Name) Console.WriteLine(persons1.Item( "Jane").Name) Console.ReadLine() End SubEnd ClassDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application Output John
John
Jane
Jane Bemerk hoe het hier gaat over een dictionarycollectie waar de elementen ook via een index benaderbaar zijn (3). Ook dit is niet bepaald typisch voor een dictionarytype, de abstractie van de klasse System.Collections.HashTable bijvoorbeeld staat dit niet toe. Bij een System.Collections.SortedList is dit dan weer wel mogelijk.
Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
|