Os genéricos ampliam o poder e a flexibilidade do VB.NET em várias áreas, mas você obtém um benefício maior de desempenho e mais opções de programação no genérico Lista objeto [Lista (de T)] do que com qualquer outro.
Usar Lista (de T), você precisa entender como implementar os vários métodos que o .NET Framework fornece. Abaixo estão três exemplos usando Para cada, Encontrar tudoe Ordenar, que demonstra como o genérico Lista classe funciona.
O primeiro passo é criar um genérico Lista. Você pode obter os dados de várias maneiras, mas o mais simples é apenas Adicionar isto. O código abaixo mostra como classificar minha coleção de cerveja e vinho!
Código inicial
Primeiro, é preciso haver um objeto que represente uma garrafa da coleção. Em um aplicativo Windows Forms, a classe Form precisa primeiro estar em um arquivo ou o designer do Visual Studio não funcionará corretamente, portanto, coloque isso no final:
Garrafa de Classe Pública. Marca pública como sequência. Nome público como sequência. Categoria pública como String. Tamanho público como decimal. Public Sub - Novo (_. ByVal m_Brand As String, _. ByVal m_Name As String, _. ByVal m_Category As String, _. ByVal m_Size As decimal) Marca = m_Marca. Nome = m_Name. Category = m_Category. Tamanho = m_Size. End Sub. Classe final
Para criar a coleção, Adicionar os itens. É isso que está no Carga de formulário evento:
Armário não ofuscante como a lista (da garrafa) = _. "Nova lista (de garrafa) Gabinete. Adicionar (nova garrafa (_. "Castle Creek", _. "Uintah Blanc", _. "Vinho", 750)) Gabinete. Adicionar (nova garrafa (_. "Companhia de fabricação de cerveja de Zion Canyon", _. "Springdale Amber Ale", _. "Cerveja", 355)) Gabinete. Adicionar (nova garrafa (_. "Vinhas espanholas do vale", _. "Syrah", _. "Vinho", 750)) Gabinete. Adicionar (nova garrafa (_. "Cervejas Wasatch", _. "Porteiro de poligamia", _. "Cerveja", 355)) Gabinete. Adicionar (nova garrafa (_. "Squatters Beer", _. "Provo Girl Pilsner", _. "Cerveja", 355))
Todo o código acima é código padrão no VB.NET 1.0. No entanto, observe que, definindo seu próprio Garrafa objeto, você obtém os benefícios de vários tipos na mesma coleção (nesse caso, ambos Corda e Decimal) e eficiente, digite "ligação tardia" segura.
Exemplo ForEach
A diversão começa quando usamos os métodos. Para começar, vamos implementar o familiar Para cada método. A documentação da Microsoft inclui esta definição de sintaxe de uso:
Instância Dim como lista Instância Dim como instância Action (Of T). ForEach (ação)
A Microsoft define ainda açao como "delegar a um método que executa uma ação no objeto passado para ele. Os elementos da lista atual (T) são transmitidos individualmente ao delegado da ação (T). "
Gorjeta: Para saber mais sobre delegados, leia Usando representantes no Visual Basic .NET para flexibilidade de tempo de execução.
A primeira coisa que você precisa codificar é o método que será delegado. Entender mal esse ponto chave é a fonte de a maioria da confusão dos alunos do VB.NET. Essa função, ou sub-rotina, é onde é feita toda a codificação personalizada para os objetos do tipo "Of".
Quando executado corretamente, você está pronto. É realmente simples neste primeiro exemplo. Uma instância inteira do Garrafa é passado e a sub-rotina seleciona tudo o que for necessário. Codificando o Para cada em si também é simples. Basta preencher o endereço do delegado usando o Endereço de método.
Sub displayBottle (ByVal b As Bottle) ResultList. Itens. Adicionar (_ b. Marca & "-" & _ b. Nome & "-" & _ b. Categoria & "-" & _ b. Tamanho) End Sub Private Sub ForEachButton_Click (... ResultList. Itens. Clear () ResultList. Itens. Adicione ("para cada exemplo") ResultList. Itens. Adicione ("") gabinete. ForEach (AddressOf displayBottle) End Sub
Exemplo de FindAll
Encontrar tudo é um pouco mais complicado. A documentação da Microsoft para Encontrar tudo se parece com isso:
Dim instância Como lista Dim corresponde como Predicado (Of T) Dim returnValue Como List (Of T) returnValue = instance. FindAll (correspondência)
Essa sintaxe inclui um novo elemento, Predicado (Of T). Segundo a Microsoft, isso representará o método "que define um conjunto de critérios e determina se o objeto especificado atenda a esses critérios. "Em outras palavras, você pode criar qualquer código que encontre algo no Lista. Eu codifiquei meu Predicado (Of T) para encontrar qualquer coisa no "Beer" Categoria.
Em vez de chamar o código delegado para cada item da lista, Encontrar tudo retorna um inteiro Lista (T) contendo apenas as correspondências resultantes do seu Predicado (Of T). Cabe ao seu código definir este segundo Lista (T) e faça algo com isso. Meu código apenas adiciona os itens a um ListBox.
Sub privado FindAllButton_Click (remetente ByVal como sistema. Objeto, ByVal e As System. EventArgs) manipula FindAllButton. Clique em ResultList. Itens. Clear () ResultList. Itens. Adicione ("FindAll Example") ResultList. Itens. Adicionar ("") Dim sublist As List (Of Bottle) sublist = Cabinet. FindAll (AddressOf findBeer) Para cada r como garrafa Na sublist ResultList. Itens. Adicionar (_ r. Marca & "-" & _ r. Nome & "-" & _ r. Categoria & "-" & _ r. Tamanho) Próxima extremidade Sub Função findBeer (ByVal b As Bottle) _ Como booleano If (b. Category = "Beer") Em seguida, retorne True Else Return False End If End End
Exemplo de classificação
O método final que este artigo examina é Ordenar. Novamente, a Microsoft usa alguma terminologia com a qual você talvez não esteja familiarizado. Na verdade, existem quatro sobrecargas diferentes do Ordenar método:
- Ordenar()
- Classificar (IComparer (T))
- Classificar (Comparação (T))
- Classificação (Int32, Int32, IComparer (T))
Isso permite que você use métodos de classificação definidos no .NET Framework para a lista, codifique seus próprios, use um sistema comparação definida para o tipo ou classifique parte da coleção usando uma posição inicial e conte parâmetro.
Neste exemplo, como eu uso a seguinte sintaxe para realmente executar a classificação, estou usando a terceira sobrecarga.
x. Name.x. Nome. CompareTo (y. Nome) (y. Nome)
Eu codifiquei outro delegado para o meu próprio comparador. Desde que eu quero classificar por meu Nome, Retiro exatamente esse valor de cada instância do Garrafa objeto que é passado e use o Ordenar (Comparação )>))). o Ordenar método realmente reorganiza o original Lista (T). Isso é o que é processado após a execução do método.
Private Sub SortButton_Click (remetente ByVal como sistema. Objeto, ByVal e As System. EventArgs) Manipula SortButton. Clique em ResultList. Itens. Clear () ResultList. Itens. Adicione ("Exemplo de classificação") ResultList. Itens. Adicione ("") gabinete. Sort (AddressOf sortCabinet) Para cada r Como uma garrafa na Lista de resultados do gabinete. Itens. Adicionar (_ r. Nome & "-" & _ r. Marca & "-" & _ r. Categoria & "-" & _ r. Tamanho) Próxima extremidade Sub-função compartilhada particular sortCabinet (_ ByVal x Como Bottle, ByVal y Como Bottle) Como Return inteiro x. Nome. CompareTo (y. Nome) Função Final
Esses métodos foram selecionados para demonstrar as principais maneiras pelas quais os métodos Framework Lista (T) são realmente codificados. Há uma série de outros métodos, no entanto. É isso que faz Lista (T) tão útil!