VB.Net/Data Structure/IEnumerable

Материал из VB Эксперт
Перейти к: навигация, поиск

IEnumerable: array like access

<source lang="vbnet"> Imports System Imports System.Collections

Public Class MainClass

   Shared Sub Main(ByVal args As String())
            " create a new list box and initialize
            Dim currentListBox As New EnumerableClass("A", "B")
            " add a few strings
            currentListBox.Add("C")
            currentListBox.Add("D")
            currentListBox.Add("E")
            currentListBox.Add("F")
            " test the access
            Dim subst As String = "Z"
            currentListBox(1) = subst
            " access all the strings
            Dim s As String
            For Each s In currentListBox
                Console.WriteLine("Value: {0}", s)
            Next
   End Sub

End Class

    Public Class EnumerableClass : Implements IEnumerable
        Private strings( ) As String
        Private ctr As Integer = 0
        Private Class MyEnumerator
            Implements IEnumerator
            Private currentListBox As EnumerableClass
            Private index As Integer
            Public Sub New(ByVal currentListBox As EnumerableClass)
                Me.currentListBox = currentListBox
                index = -1
            End Sub
            Public Function MoveNext( ) As Boolean _
              Implements IEnumerator.MoveNext
                index += 1
                If index >= currentListBox.strings.Length Then
                    Return False
                Else
                    Return True
                End If
            End Function
            Public Sub Reset( ) _
              Implements IEnumerator.Reset
                index = -1
            End Sub
            Public ReadOnly Property Current( ) As Object _
            Implements IEnumerator.Current
                Get
                    Return currentListBox(index)
                End Get
            End Property
        End Class  " end nested class
        Public Function GetEnumerator( ) As IEnumerator _
        Implements IEnumerable.GetEnumerator
            Return New MyEnumerator(Me)
        End Function
        Public Sub New( _
          ByVal ParamArray initialStrings( ) As String)
            ReDim strings(7)
            Dim s As String
            For Each s In initialStrings
                strings(ctr) = s
                ctr += 1
            Next
        End Sub
        Public Sub Add(ByVal theString As String)
            strings(ctr) = theString
            ctr += 1
        End Sub
        Default Public Property Item( _
          ByVal index As Integer) As String
            Get
                If index < 0 Or index >= strings.Length Then
                    " handle bad index
                    Exit Property
                End If
                Return strings(index)
            End Get
            Set(ByVal Value As String)
                strings(index) = Value
            End Set
        End Property
        Public Function GetNumEntries( ) As Integer
            Return ctr
        End Function
    End Class


      </source>


Implements IEnumerable

<source lang="vbnet"> Imports System Imports System.Collections Public Class MainClass

   Shared Sub Main()
      Dim currentListBox As New _
          ListBoxTest("Hello", "World")
      "add a few strings
      currentListBox.Add("o")
      currentListBox.Add("s")
      currentListBox.Add("n")
      currentListBox.Add("t")
      "test the access
      Dim subst As String = "Universe"
      currentListBox(1) = subst
      "access all the strings
      Dim s As String
      For Each s In currentListBox
          Console.WriteLine("Value: {0}", s)
      Next
  End Sub

End Class

    Public Class ListBoxTest : Implements IEnumerable
        Private strings(  ) As String
        Private ctr As Integer = 0
        Private Class ListBoxEnumerator
            Implements IEnumerator
            Private currentListBox As ListBoxTest
            Private index As Integer
            Public Sub New(ByVal currentListBox As ListBoxTest)
                Me.currentListBox = currentListBox
                index = -1
            End Sub
            Public Function MoveNext(  ) As Boolean _
              Implements IEnumerator.MoveNext
                index += 1
                If index >= currentListBox.strings.Length Then
                    Return False
                Else
                    Return True
                End If
            End Function
            Public Sub Reset(  ) _
              Implements IEnumerator.Reset
                index = -1
            End Sub
            Public ReadOnly Property Current(  ) As Object _
            Implements IEnumerator.Current
                Get
                    Return currentListBox(index)
                End Get
            End Property
        End Class 
        Public Function GetEnumerator(  ) As IEnumerator _
        Implements IEnumerable.GetEnumerator
            Return New ListBoxEnumerator(Me)
        End Function
        Public Sub New( _
          ByVal ParamArray initialStrings(  ) As String)
            ReDim strings(7)
            Dim s As String
            For Each s In initialStrings
                strings(ctr) = s
                ctr += 1
            Next
        End Sub
        Public Sub Add(ByVal theString As String)
            strings(ctr) = theString
            ctr += 1
        End Sub
        Default Public Property Item( _
          ByVal index As Integer) As String
            Get
                If index < 0 Or index >= strings.Length Then
                    " handle bad index
                    Exit Property
                End If
                Return strings(index)
            End Get
            Set(ByVal Value As String)
                strings(index) = Value
            End Set
        End Property
        Public Function GetNumEntries(  ) As Integer
            Return ctr
        End Function
    End Class
          
      </source>