Lista de tipos (Visual Basic)
Especifica os parâmetros de tipo para um elemento de programação genérico. Vários parâmetros são separados por vírgulas. A seguir está a sintaxe para um parâmetro de tipo.
Sintaxe
[genericmodifier] typename [ As constraintlist ]
Partes
Termo | Definição |
---|---|
genericmodifier |
Opcional. Pode ser usado apenas em interfaces genéricas e delegados. Você pode declarar uma covariante de tipo usando a palavra-chave out ou contravariante usando a palavra-chave In . Ver Covariância e Contravariância. |
typename |
Obrigatório. Nome do parâmetro type. Este é um espaço reservado, a ser substituído por um tipo definido fornecido pelo argumento de tipo correspondente. |
constraintlist |
Opcional. Lista de requisitos que restringem o tipo de dados que podem ser fornecidos para typename . Se tiver várias restrições, coloque-as entre chaves ({ } ) e separe-as com vírgulas. Você deve introduzir a lista de restrições com a palavra-chave As . Você usa As apenas uma vez, no início da lista. |
Observações
Cada elemento de programação genérico deve ter pelo menos um parâmetro type. Um parâmetro type é um espaço reservado para um tipo específico (um elemento construído) que o código do cliente especifica quando cria uma instância do tipo genérico. Você pode definir uma classe, estrutura, interface, procedimento ou delegado genérico.
Para obter mais informações sobre quando definir um tipo genérico, consulte Tipos genéricos no Visual Basic. Para obter mais informações sobre nomes de parâmetros de tipo, consulte Nomes de elementos declarados.
Regras
Parênteses. Se você fornecer uma lista de parâmetros de tipo, deverá colocá-la entre parênteses e introduzir a lista com a palavra-chave Of . Você usa
Of
apenas uma vez, no início da lista.Restrições. Uma lista de restrições em um parâmetro de tipo pode incluir os seguintes itens em qualquer combinação:
Qualquer número de interfaces. O tipo fornecido deve implementar todas as interfaces desta lista.
No máximo uma aula. O tipo fornecido deve herdar dessa classe.
A palavra-chave
New
. O tipo fornecido deve expor um construtor sem parâmetros que seu tipo genérico possa acessar. Isso é útil se você restringir um parâmetro de tipo por uma ou mais interfaces. Um tipo que implementa interfaces não necessariamente expõe um construtor e, dependendo do nível de acesso de um construtor, o código dentro do tipo genérico pode não ser capaz de acessá-lo.A
Class
palavra-chave ou aStructure
palavra-chave. AClass
palavra-chave restringe um parâmetro de tipo genérico para exigir que qualquer argumento de tipo passado para ele seja um tipo de referência, por exemplo, uma cadeia de caracteres, matriz ou delegado, ou um objeto criado a partir de uma classe. AStructure
palavra-chave restringe um parâmetro de tipo genérico para exigir que qualquer argumento de tipo passado para ele seja um tipo de valor, por exemplo, uma estrutura, enumeração ou tipo de dados elementar. Não é possível incluir ambosClass
eStructure
no mesmoconstraintlist
.
O tipo fornecido deve satisfazer todos os requisitos incluídos no
constraintlist
.As restrições em cada parâmetro de tipo são independentes das restrições em outros parâmetros de tipo.
Comportamento
Substituição em tempo de compilação. Ao criar um tipo construído a partir de um elemento de programação genérico, você fornece um tipo definido para cada parâmetro type. O compilador do Visual Basic substitui o tipo fornecido para cada ocorrência de
typename
dentro do elemento genérico.Ausência de constrangimentos. Se você não especificar nenhuma restrição em um parâmetro type, seu código será limitado às operações e membros suportados pelo Object Data Type para esse parâmetro type.
Exemplo 1
O exemplo a seguir mostra uma definição de esqueleto de uma classe de dicionário genérica, incluindo uma função de esqueleto para adicionar uma nova entrada ao dicionário.
Public Class dictionary(Of entryType, keyType As {IComparable, IFormattable, New})
Public Sub add(ByVal et As entryType, ByVal kt As keyType)
Dim dk As keyType
If kt.CompareTo(dk) = 0 Then
End If
End Sub
End Class
Exemplo 2
Por dictionary
ser genérico, o código que o usa pode criar uma variedade de objetos a partir dele, cada um com a mesma funcionalidade, mas agindo em um tipo de dados diferente. O exemplo a seguir mostra uma linha de código que cria um dictionary
objeto com String
entradas e Integer
chaves.
Dim dictInt As New dictionary(Of String, Integer)
Exemplo 3
O exemplo a seguir mostra a definição de esqueleto equivalente gerada pelo exemplo anterior.
Public Class dictionary
Public Sub Add(ByVal et As String, ByVal kt As Integer)
Dim dk As Integer
If kt.CompareTo(dk) = 0 Then
End If
End Sub
End Class