Lista de tipos (Visual Basic)

Especifica los parámetros de tipo para un elemento de programación genérico. Los distintos parámetros se separan mediante 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 una covariante de tipo mediante la palabra clave Out o una 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 paréntesis ({ }) y sepárelas con comas. Debe introducir la lista de restricciones con la palabra clave As. Solo se usa As 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, una estructura, una interfaz, un procedimiento o un delegado genéricos.

Para obtener más información sobre cuándo definir un tipo genérico, consulte Tipos genéricos en Visual Basic. Para obtener más información sobre los nombres de parámetros de tipo, consulte 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 usa Of 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 heredarse de la clase.

    • La palabra clave New. El tipo proporcionado debe exponer un constructor sin parámetros al que pueda acceder 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 clave Class o la palabra clave Structure. La palabra clave Class 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 una clase. La palabra clave Structure 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 cadena, una matriz o un delegado, o un objeto creado a partir de una clase. No puede incluir tanto Class como Structure en el mismo constraintlist.

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

    Las restricciones de cada parámetro de tipo son independientes de las restricciones en 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 compilador de Visual Basic sustituye el tipo proporcionado por cada aparición de typename en el 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 dictionary 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 en un tipo de datos diferente. En el ejemplo siguiente se muestra una línea de código que crea un objeto dictionary con String entradas y claves Integer.

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

Consulte también