Partilhar via


Como: Converter uma coleção personalizada para uma coleção tipada Visual Basic

Uma coleção personalizada Visual Basic 6.0 limita o conteúdo de uma coleção para uma classe específica.Isso também é conhecido sistema autônomo uma coleção tipada.Visual Basic 2008 fornece várias opções para criar classes de tipos de coleções personalizadas do Visual Basic 6.0. Este tópico contém três procedimentos, cada um mostrando uma opção diferente.

Este tópico pressupõe que a coleção personalizada Visual Basic 6.0 foi criado usando o Class Builder Utility.Uma coleção deste tipo possui os seguintes membros:

  • Adicionar   Adiciona uma nova instância da classe personalizada à coleção.

  • Item    Retorna uma instância de uma coleção com base em um índice na coleção.

  • Contar    Retorna o número de instâncias na coleção.

  • Remover   Remove uma instância da coleção com base em um índice na coleção.

  • Enumeração   Oferece suporte para enumerações usando o For Each sintaxe.

Usando o assistente para atualização para criar uma coleção

  • Abra o projeto Visual Basic 6.0 em Visual Basic 2008. Para um conjunto de classe nomeada Forest que contém as instâncias das Tree classe, o código atualizado é mostrado abaixo. A vantagem desse método é que nenhuma alteração no código é necessária.

    ' For this example, the Tree class has no members.
    Option Strict Off
    Option Explicit On
    Friend Class Tree
    End Class
    
    Friend Class Forest
      Implements System.Collections.IEnumerable
      'local variable to hold collection
      Private mCol As Collection
    
      Public Function Add(Optional ByRef sKey As String = "") As Tree
        'create a new object
        Dim objNewMember As Tree
        objNewMember = New Tree
        'set the properties passed into the method
        If Len(sKey) = 0 Then
          mCol.Add(objNewMember)
        Else
          mCol.Add(objNewMember, sKey)
        End If
        'return the object created
        Add = objNewMember
        'UPGRADE_NOTE: Object objNewMember may not be destroyed until it is garbage collected. Click for more: 'ms-help://MS.MSDNQTR.80.en/commoner/redir/redirect.htm?keyword="vbup1029"'
    
        objNewMember = Nothing
      End Function
    
      Default Public ReadOnly Property Item(ByVal vntIndexKey _
        As Object) As Tree
        Get
          'used when referencing an element in the collection
          'vntIndexKey contains either the Index or Key to the collection,
          'this is why it is declared as a Variant
          'Syntax: Set foo = x.Item(xyz) or Set foo = x.Item(5)
          Item = mCol.Item(vntIndexKey)
        End Get
      End Property
    
      Public ReadOnly Property Count() As Integer
        Get
          'used when retrieving the number of elements in the
          'collection. Syntax: Debug.Print x.Count
          Count = mCol.Count()
        End Get
      End Property
    
      'UPGRADE_NOTE: NewEnum property was commented out. Click for more: 'ms-help://MS.MSDNQTR.80.en/commoner/redir/redirect.htm?keyword="vbup1054"'
    
      'Public ReadOnly Property NewEnum() As stdole.IUnknown
        'Get
          'this property allows you to enumerate
          'this collection with the For...Each syntax
          'NewEnum = mCol._NewEnum
        'End Get
      'End Property
    
      Public Function GetEnumerator() As System.Collections.IEnumerator _
        Implements System.Collections.IEnumerable.GetEnumerator
        'UPGRADE_TODO: Uncomment and change the following line to return the collection enumerator. Click for more: 'ms-help://MS.MSDNQTR.80.en/commoner/redir/redirect.htm?keyword="vbup1055"'
    
        'GetEnumerator = mCol.GetEnumerator
      End Function
    
      Public Sub Remove(ByRef vntIndexKey As Object)
        'used when removing an element from the collection
        'vntIndexKey contains either the Index or Key, which is why
        'it is declared as a Variant
        'Syntax: x.Remove(xyz)
        mCol.Remove(vntIndexKey)
      End Sub
    
      'UPGRADE_NOTE: Class_Initialize was upgraded to Class_Initialize_Renamed. Click for more: 'ms-help://MS.MSDNQTR.80.en/commoner/redir/redirect.htm?keyword="vbup1061"'
    
      Private Sub Class_Initialize_Renamed()
        'creates the collection when this class is created
        mCol = New Collection
      End Sub
      Public Sub New()
        MyBase.New()
        Class_Initialize_Renamed()
      End Sub
    
      'UPGRADE_NOTE: Class_Terminate was upgraded to Class_Terminate_Renamed. Click for more: 'ms-help://MS.MSDNQTR.80.en/commoner/redir/redirect.htm?keyword="vbup1061"'
    
      Private Sub Class_Terminate_Renamed()
        'destroys collection when this class is terminated
        'UPGRADE_NOTE: Object mCol may not be destroyed until it is garbage collected. Click for more: 'ms-help://MS.MSDNQTR.80.en/commoner/redir/redirect.htm?keyword="vbup1029"'
    
        mCol = Nothing
      End Sub
      Protected Overrides Sub Finalize()
        Class_Terminate_Renamed()
        MyBase.Finalize()
      End Sub
    End Class
    

The .NET Framework e Visual Basic 2008 oferecem várias coleções genéricas. A vantagem de usar classes genéricas é que muito pouco código é necessário para implementar a classe.

Criando uma coleção usando coleções genéricas

  1. Crie a definição da classe.Aqui está um exemplo de um Tree classe:

    Public Class Tree
        Public Species As String
    End Class
    
  2. Crie uma classe lista genérica do .NET Framework. Essa declaração essencialmente substitui o inteiro Forestclasse no procedimento acima chamado "usar o Assistente de atualização para criar uma coleção."

    Dim forest As New System.Collections.Generic.List(Of Tree)
    
  3. Escreva o código para acessar o objeto lista.O código a seguir adiciona cinco instâncias do Tree classe de coleção e, em seguida, os imprime.

    For count As Integer = 1 To 5
        Dim sapling As New Tree
        sapling.Species = "oak"
        Forest.Add(sapling)
    Next
    
    For Each sapling As Tree In Forest
        MsgBox(sapling.Species)
    Next
    

The .NET Framework inclui o CollectionBase classe. Coleções tipadas são criadas por herança da CollectionBase. Esse método usa menos código do que o método do Assistente de atualização, mas mais do que a solução genéricos.É mais flexível do que a solução de classes genéricas, pois o programador pode adicionar membros adicionais à classe de coleção.

Criando uma coleção da classe CollectionBase

  1. Crie a definição da classe.Aqui está um exemplo de um Tree classe:

    Public Class Tree
        Public Species As String
    End Class
    
  2. Criar uma classe que herda a partir de CollectionBase classe. No mínimo, adicione um Add método e um Item propriedade. Isso faz da classe coleção fortemente tipada-.

    Class TreeCollection
      Inherits System.Collections.CollectionBase
    
      Public Sub Add(ByVal value As Tree)
        Me.List.Add(value)
      End Sub
    
      Default Public Property Item(ByVal index As Integer) As Tree
          Get
              Return CType(Me.List(index), Tree)
          End Get
          Set(ByVal value As Tree)
              If index <= Me.Count - 1 Then
                  Me.List(index) = value
              Else
                  Throw New IndexOutOfRangeException()
              End If
          End Set
      End Property
    End Class
    
  3. Escreva o código para acessar o objeto lista.O código a seguir adiciona cinco instâncias do Tree classe de coleção e, em seguida, os imprime.

    Dim forest As New TreeCollection
    
    For count As Integer = 1 To 5
        Dim sapling As New Tree
        sapling.Species = "oak"
        Forest.Add(sapling)
    Next
    
    For Each sapling As Tree In Forest
        MsgBox(sapling.Species)
    Next
    

Consulte também

Referência

List

CollectionBase

IEnumerable