Public Class Person Private m_name As String = "ݒ" Private m_age As Integer = 0 Public Property Name() As String Get Return m_name End Get Set(ByVal Value As String) m_name = Value End Set End Property Public Property Age() As Integer Get Return m_age End Get Set(ByVal Value As Integer) m_age = Value End Set End Property End Class Public Class PersonsEnumerator Implements IEnumerator Private personsList As ArrayList Private pointer As Integer Public Overridable ReadOnly Property Current() As Object Implements IEnumerator.Current Get Return personsList(pointer) End Get End Property Public Overridable Function MoveNext() As Boolean Implements IEnumerator.MoveNext pointer += 1 If pointer >= personsList.Count Then Return False Return True End Function Public Overridable Sub Reset() Implements IEnumerator.Reset pointer = -1 End Sub Public Sub New(ByVal personsList As ArrayList) Me.personsList = CType(personsList.Clone(), ArrayList) Reset() End Sub End Class Public Class EnumerablePersons Implements IEnumerable Public Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator Return New PersonsEnumerator(PersonsList) End Function Public ID As String = "abc" Private PersonsList As New ArrayList Public Sub Add(ByVal person As Object) PersonsList.Add(person) End Sub End Class Public Class Persons _ Public PersonsList As EnumerablePersons Public Sub SetPersons(ByVal person1 As Person, ByVal person2 As Person, ByVal person3 As Person) PersonsList = New EnumerablePersons PersonsList.Add(person1) PersonsList.Add(person2) PersonsList.Add(person3) End Sub Public Sub Dump() For Each person As Person In PersonsList System.Diagnostics.Trace.WriteLine(person.Name) System.Diagnostics.Trace.WriteLine(person.Age) Next End Sub End Class