Visual Basic 2012 Voorbeelden
   

visual basic 2012 broncode voorbeelden

Blijf op de hoogte van de recente aanpassingen op vbvoorbeelden!

Microsoft Visual Studio 2012Microsoft Developers Network - Visual BasicMicrosoft .NET Framework

22.6. System.Collections.ArrayList Implementeert IList

Print Email Deel op Twitter Deel op Facebook

Dit artikel is gepubliceerd op maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.

22.6.1. System.Collections.ArrayList

De voorgedefinieerde klasse System.Collections.ArrayList implementeert de IList interface :
Visual Basic 2012 Broncode - Codevoorbeeld 529
Option Strict On

Imports System.Collections

Public Class Person
    Public Property Name As String
    Public Overrides Function ToString() As String
        ToString = Name
    End Function
    Public Overrides Function Equals(ByVal obj As Object) As Boolean
        If obj IsNot Nothing AndAlso TypeOf obj Is Person Then
            Equals = (Me.Name.Equals(DirectCast(obj, Person).Name))
        End If
    End Function
    Public Overrides Function GetHashCode() As Integer
        GetHashCode = Name.GetHashCode()
    End Function
End Class
Public Class ArrayListExample1
    Public Shared Sub Main()
        Dim person1 As New Person With {.Name = "John"}
        Dim person2 As New Person With {.Name = "Jane"}
        Dim person3 As New Person With {.Name = "Paul"}
        '
        Dim arrayList1 As New ArrayList
        arrayList1.Add(person1)
        arrayList1.Add(person2)
        Console.WriteLine( _
               arrayList1.IndexOf(New Person With {.Name = "Jane"}))  ' 1 (1)
        arrayList1.Insert(1, person3)
        Console.WriteLine(arrayList1.Item(1).ToString())              ' Paul
        Console.WriteLine( _
               arrayList1.Contains(New Person With {.Name = "Paul"})) ' True (2)
        arrayList1.RemoveAt(1)
        Console.WriteLine(arrayList1.Item(1).ToString())              ' Jane
        '
        Console.ReadLine()
    End Sub
End Class
Console Application Output
1
Paul
True
Jane
Het is vermeldenswaardig dat members als IndexOf, Contains en Remove gebruik maken van de Equals implementatie van de elementen uit de collectie.
Deze members gaan op zoek naar elementen in de collectie en gebruiken dus logische gelijkheid om na te gaan of een element van de collectie gelijk is aan de parameter.
Had men fysieke gelijkheid hiervoor gebruikt, of indien de item klasse Person de van Object overgeërfde Equals niet had geherdefinieerd, dan hadden bovenstaande calls naar IndexOf (1) en Contains (2) respectievelijk -1 en False opgeleverd.
Voor meer details over logische en fysieke gelijkheid kan je terecht in de desbetreffende topics.

Type ArrayList voegt nog een aantal intressante members toe aan diegene die worden overgeërfd van IList, bijvoorbeeld :
   Public Overridable Sub AddRange(ByVal c As ICollection)
Om meteen meerdere elementen aan de collectie toe te voegen.  Deze toe te voegen elementen moeten zich reeds in ICollection vorm verzamelen.
   Public Overridable Sub Sort()
Om de elementen van de ArrayList te sorteren.
   Public Overridable Sub Reverse()
Om de volgorde van de elementen om te keren.
Visual Basic 2012 Broncode - Codevoorbeeld 530
Partial Class Person : Implements IComparable
    Public Function CompareTo(ByVal obj As Object) As Integer _
                                                Implements IComparable.CompareTo
        If obj Is Nothing Then
            CompareTo = 1
        ElseIf Not TypeOf obj Is Person Then
            Throw New ArgumentException("An invalid argument was " & _
                          "specified.  An argument of type Person is required.")
        Else
            CompareTo = Me.Name.CompareTo(DirectCast(obj, Person).Name)
        End If
    End Function
End Class
Public Class ArrayListExample2
    Public Shared Sub Main()
        Dim persons1 As Person() = _
           New Person() {New Person With {.Name = "Paul"}, _
                         New Person With {.Name = "John"}}
        Dim persons2 As Person() = _
           New Person() {New Person With {.Name = "Jane"}, _
                         New Person With {.Name = "Rita"}}
        '
        Dim arrayList1 As New ArrayList(persons1)
        arrayList1.AddRange(persons2)
        Print(arrayList1) ' Paul John Jane Rita
        arrayList1.Sort()
        Print(arrayList1) ' Jane John Paul Rita
        arrayList1.Reverse()
        Print(arrayList1) ' Rita Paul John Jane
        '
        Console.ReadLine()
    End Sub
    Public Shared Sub Print(ByVal collection As IEnumerable)
        For Each element As Object In collection
            Console.Write(element.ToString() & " ")
        Next
        Console.WriteLine()
    End Sub
End Class
Console Application Output
Paul John Jane Rita
Jane John Paul Rita
Rita Paul John Jane
Bemerk dat de ArrayList.Sort method van de CompareTo implementatie van de elementen gebruik maakt om deze te sorteren.  Er bestaat een overladen versie van Sort waaraan je een System.Collections.IComparer argument kan doorgeven.

Lees het topic over de IComparer interface voor meer details.

22.6.2. System.Array Implementeert IList

Ook het type System.Array implementeert naast ondermeer de IEnumerable en ICollection interfaces ook de IList interface.  De meeste van de members uit IList zijn echt Private geïmplementeerd en dus niet beschikbaar in de publieke interface.

Zelfs indien die wel beschikbaar zouden zijn moet je nog rekening houden met het feit dat een array een fixed size list is :
Visual Basic 2012 Broncode - Codevoorbeeld 531
Public Class ArrayExample
    Public Shared Sub Main()
        Dim array1 As Integer() = New Integer() {1, 2, 3}
        '
        Dim list1 As IList = array1
        Console.WriteLine(list1.IsFixedSize) ' True
        Try
            list1.Add(4)                     ' NotSupportedException
        Catch ex As NotSupportedException
            Console.WriteLine(ex.Message)
        End Try
        '
        Console.ReadLine()
    End Sub
End Class
Console Application Output
True
Collection was of a fixed size.

Dit artikel is gepubliceerd op maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.