Coleção de Classes do Visual Basic
Uma coleção é uma forma de agrupar um conjunto de itens relacionados.Muitos tipos diferentes de coleções de tipos existem.Coleções pré-definidas são usadas em aplicativos Visual Basic para muitos propósitos, por exemplo a Control.ControlCollection em um Form, retornada pela propriedade de formulário Controls.Você também pode criar suas próprias coleções para organizar e manipular objetos.
Coleções são uma boa forma de manter um registro dos objetos que o seu aplicativo pode precisar criar e destruir dinamicamente.O seguinte fragmento de código mostra como você pode usar o Método de Adição de uma Visual Basic Coleção de Objetos para manter uma lista de objetos widget que o usuário criou.
' Declare and create the Collection object.
Public widgetColl As New Microsoft.VisualBasic.Collection()
' Create a new widget and add it to the widgetColl collection.
Private Sub makeAWidget()
Dim tempWidget As New widget()
widgetColl.Add(tempWidget)
End Sub
No exemplo anterior, a coleção widgetColl organiza e expõe todos os objetos widget criados por meio do procedimento makeAWidget.Você pode recuperar referências a objetos para cada widget por meio do índice das coleções.O tamanho da coleção é ajustado automaticamente à medida que cada objeto widget é adicionado.Você pode usar For each... Next demonstrativo (Visual Basic) para iterar ao longo da coleção.Se você quiser dar ao objeto widget uma chave por meio da qual ele possa ser recuperado, você pode fornecer uma sequência de caracteres como segundo parâmetro do método Add.
Uma Visual Basic Collection de objetos armazena todos seus elementos com o tipo Object, assim você pode adicionar um item de qualquer tipo de dado.Não há proteção contra tipos de dados inapropriados sendo adicionados.Para evitar esta limitação, você pode usar coleções genéricas do namespace System.Collections.Generic.Para obter mais informações, consulte Como: Criar uma coleção de objetos.
Criando e Destruindo uma Coleção de Objetos
A palavra-chave Novo (Visual Basic) na declaração da variável widgetColl faz com que um objeto Collection seja criado quando o controle passa para a declaração de estrutura.Dado que Collection é uma classe, em vez de um tipo de valor, você deve criar uma instância dela e manter a referência a essa instância em uma variável.Essa instância é uma Coleção de Objetos Visual Basic.
Como qualquer outro objeto, um objeto de Collection é marcado para coleta de lixo (GC, garbage collection) quando a última variável que contém uma referência a ele é definida como Nada (Visual Basic) ou sai do escopo.Todas as referências a objetos que ele contém são liberadas quando ele é reclamado para coleta de lixo.Por esta razão, a variável widgetColl no exemplo anterior é declarada na classe pai, de modo que ela exista ao longo de toda a vida do programa.
Uma coleção mantém referências aos objetos que ela controla, mas não contém os objetos propriamente.Assim sendo, a destruição de um objeto Collection não destrói os objetos que ele controla.Cada objeto individual que tenha sido um elemento da coleção continua a existir até que seja individualmente marcado para coleta de lixo.
Trabalhando com Elementos
Os serviços básicos de adicionar, deletar e recuperar elementos de uma coleção dependem de chaves e índices.Uma chave é um valor String.Ela pode ser um nome, um número de licença de motorista, um número de telefone, ou simplesmente um inteiro convertido em uma sequência de caracteres.O método Add permite que você associe uma chave a um elemento, como descrito em Como: Adicionar, excluir e recuperar itens de uma coleção.
Um índice na classe Collection é um inteiro entre 1 e o número de itens na coleção.Propriedades de Contagem ( Objeto de coleção). retorna o número atual de itens.Você pode controlar o valor inicial de um índice de item utilizando os parâmetros Before ou After quando você chama Add, mas o valor do índice pode mudar à medida que outros itens são adicionados ou deletados.Para obter mais informações, consulte Método Add (objeto da coleção).
Você pode remover um único elemento de uma coleção passando a chave ou o índice para Método Remove (Objeto Coleção).Você pode esvaziar uma coleção ou remover todos os elementos com Método Clear (Objeto Coleção).
Acessando Elementos
Você pode passar um valor de chave para Método Contains (Objeto Coleção) para testar se uma coleção contém um elemento com aquela chave.Você pode recuperar um elemento passando sua chave ou seu índice para Propriedade Item (Objeto Coleção).
Você pode usar valores de índices e a propriedade Item para iterar sobre os itens em uma coleção, ou você pode usar For each... Next demonstrativo (Visual Basic).O exemplo a seguir mostra dois modos de dar a todos os empregados em uma coleção de objetos employee um aumento de 10%, assumindo que a variável employeesColl contenha uma referência a um objeto Collection.
Option Strict On
' The following alternative uses the Count and Item properties.
Dim emp As employee
For counter As Integer = 1 To employeesColl.Count
emp = CType(employeesColl.Item(counter), employee)
emp.payRate *= 1.1
Next counter
' The following alternative uses the For Each...Next statements.
For Each emp As employee In employeesColl
emp.payRate *= 1.1
Next emp
Entretanto, se você tiver adicionado um ou mais elementos a employeesColl que não são do tipo employee, o loop For Each lança uma exceção ArgumentException em tempo de execução.
Tipos de Dados de Elementos
Uma Coleção de Objetos Visual Basic armazena cada item com um tipo de dado Object.Portanto, a gama de tipos de dados que você pode adicionar a um objeto Collection é o mesmo que a gama de tipos de dados que você pode armazenar em uma variável Object.Isso inclui tipos de dados padrão, objetos e matrizes, bem como estruturas definidas pelo usuário e instâncias de classe.
Como o objeto Collection armazena cada item como um Object, a propriedade Item retorna um valor de Object.Para usar o item em seu código, você deve covertê-lo tipicamente de Object para um tipo de dado em tempo de execução do item.O modo como você faz isso depende da configuração da opção de checagem de tipo em Opção declaração estrito.
Conversão Implícita de Objeto
Se Option Strict é Off, você pode converter implicitamente um elemento de Collection para seu tipo apropriado de dado, como mostrado no exemplo a seguir.
Option Strict Off
Dim sampleColl As New Microsoft.VisualBasic.Collection()
Dim sampleString As String = "This is a string"
Dim aString As String
sampleColl.Add(sampleString)
' The following statements convert the collection item to a string.
Try
aString = sampleColl.Item(1)
Catch ex As Exception
' Insert code to run if the collection item cannot be converted to String.
End Try
Conversão Explícita de Objeto
Se Option Strict é On, você pode converter explicitamente de Object para o tipo de dado em tempo de execução do elemento.Para obter um elemento de Item desse modo, você pode usar CType Function para efetuar a conversão, como mostrado no exemplo a seguir.
Option Strict On
Dim sampleColl As New Microsoft.VisualBasic.Collection()
Dim sampleString As String = "This is a string"
Dim aString As String
sampleColl.Add(sampleString)
' The following statements convert the collection item to a string.
Try
aString = CType(sampleColl.Item(1), String)
Catch ex As Exception
' Insert code to run if the collection item cannot be converted to String.
End Try
Serviços Adicionais
As propriedades e métodos do objeto Collection proveem apenas os serviços mais básicos para coleções.Por exemplo, o método Add não pode checar o tipo de um elemento sendo adicionado a uma coleção, o que você pode desejar fazer para garantir que a coleção contenha apenas um tipo de elemento.Se você puder garantir isto no método Add, você terá uma coleção fortemente tipada e você não terá que converter o retorno da propriedade Item ao seu tipo de dado em tempo de execução.Isso melhora o seu desempenho.
Você pode fornecer funcionalidades mais robustas — e propriedades, métodos e eventos adicionais — criando sua própria coleção de classes, como descrito em Como: Definir coleções em suas classes.
Consulte também
Conceitos
Coleções sistema autônomo uma alternativa a matrizes