Lista de tipos (Visual Basic)

Especifica los parámetros de tipo para un elemento de programación genérico. Varios parámetros están separados por comas. A continuación se muestra la sintaxis de un parámetro de tipo.

Sintaxis

[genericmodifier] typename [ As constraintlist ]

Partes

Término Definición
genericmodifier Opcional. Solo se puede usar en interfaces y delegados genéricos. Puede declarar un tipo covariante mediante la palabra clave Out o contravariante mediante la palabra clave In. Vea Covarianza y contravarianza.
typename Necesario. Nombre del parámetro de tipo. Se trata de un marcador de posición que se va a reemplazar por un tipo definido proporcionado por el argumento de tipo correspondiente.
constraintlist Opcional. Lista de requisitos que restringen el tipo de datos que se puede proporcionar para typename . Si tiene varias restricciones, escríbalas entre llaves ( ) y { } separelas con comas. Debe introducir la lista de restricciones con la palabra clave As. Solo se As usa una vez, al principio de la lista.

Comentarios

Cada elemento de programación genérico debe tomar al menos un parámetro de tipo. Un parámetro de tipo es un marcador de posición para un tipo específico (un elemento construido ) que el código de cliente especifica cuando crea una instancia del tipo genérico. Puede definir una clase, estructura, interfaz, procedimiento o delegado genéricos.

Para obtener más información sobre cuándo definir un tipo genérico, vea Tipos genéricos en Visual Basic. Para obtener más información sobre los nombres de parámetro de tipo, vea Nombres de elementos declarados.

Reglas

  • Paréntesis. Si proporciona una lista de parámetros de tipo, debe incluirla entre paréntesis y debe introducir la lista con la palabra clave Of. Solo se Of usa una vez, al principio de la lista.

  • Restricciones. Una lista de restricciones en un parámetro de tipo puede incluir los siguientes elementos en cualquier combinación:

    • Cualquier número de interfaces. El tipo proporcionado debe implementar todas las interfaces de esta lista.

    • Como máximo una clase. El tipo proporcionado debe heredar de esa clase.

    • La palabra clave New. El tipo proporcionado debe exponer un constructor sin parámetros al que pueda tener acceso el tipo genérico. Esto resulta útil si restringe un parámetro de tipo por una o varias interfaces. Un tipo que implementa interfaces no expone necesariamente un constructor y, en función del nivel de acceso de un constructor, es posible que el código del tipo genérico no pueda acceder a él.

    • La palabra Class clave o la palabra clave Structure . La palabra clave restringe un parámetro de tipo genérico para requerir que cualquier argumento de tipo que se le pase sea un tipo de referencia, por ejemplo, una cadena, una matriz o un delegado, o un objeto creado a partir de Class una clase. La palabra clave restringe un parámetro de tipo genérico para requerir que cualquier argumento de tipo que se le pase sea un tipo de valor, por ejemplo, una estructura, una enumeración o un tipo Structure de datos básico. No puede incluir y Class Structure en el mismo constraintlist .

    El tipo proporcionado debe satisfacer todos los requisitos que incluya en constraintlist .

    Las restricciones de cada parámetro de tipo son independientes de las restricciones de otros parámetros de tipo.

Comportamiento

  • Sustitución en tiempo de compilación. Cuando se crea un tipo construido a partir de un elemento de programación genérico, se proporciona un tipo definido para cada parámetro de tipo. El Visual Basic compilador sustituye a ese tipo proporcionado por cada aparición de typename dentro del elemento genérico.

  • Ausencia de restricciones. Si no especifica ninguna restricción en un parámetro de tipo, el código se limita a las operaciones y los miembros admitidos por object data type para ese parámetro de tipo.

Ejemplo 1

En el ejemplo siguiente se muestra una definición de esqueleto de una clase de diccionario genérico, incluida una función de esqueleto para agregar una nueva entrada al diccionario.

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

Ejemplo 2

Dado que es genérico, el código que lo usa puede crear una variedad de objetos a partir de él, cada uno con la misma funcionalidad, pero actuando dictionary sobre un tipo de datos diferente. En el ejemplo siguiente se muestra una línea de código que crea un dictionary objeto con entradas y String Integer claves.

Dim dictInt As New dictionary(Of String, Integer)

Ejemplo 3

En el ejemplo siguiente se muestra la definición de esqueleto equivalente generada por el ejemplo 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

Consulta también