Elenco dei tipi (Visual Basic)

Specifica i parametri di tipo per un elemento di programmazione generico. Più parametri vengono separati da virgole. Di seguito è riportata la sintassi per un parametro di tipo.

Sintassi

[genericmodifier] typename [ As constraintlist ]

Parti

Termine Definizione
genericmodifier Facoltativo. Può essere usato solo in interfacce e delegati generici. È possibile dichiarare un tipo covariante usando la parola chiave Out o controvariante usando la parola chiave In. Vedere Covarianza e controvarianza.
typename Obbligatorio. Nome del parametro di tipo. Si tratta di un segnaposto da sostituire con un tipo definito fornito dall'argomento di tipo corrispondente.
constraintlist Facoltativo. Elenco dei requisiti che vincolano il tipo di dati che può essere fornito per typename. Se sono presenti più vincoli, racchiuderli tra parentesi graffe ({ }) e separarli con virgole. È necessario introdurre l'elenco di vincoli con la parola chiave As. Si usa As una sola volta, all'inizio dell'elenco.

Osservazioni:

Ogni elemento di programmazione generico deve accettare almeno un parametro di tipo. Un parametro di tipo è un segnaposto per un tipo specifico (un elemento costruito) che il codice client specifica quando crea un'istanza del tipo generico. È possibile definire una classe, una struttura, un'interfaccia, una routine o un delegato generico.

Per altre informazioni su quando definire un tipo generico, vedere Tipi generici in Visual Basic. Per altre informazioni sui nomi dei parametri di tipo, vedere Nomi di elementi dichiarati.

Regole

  • Parentesi. Se si specifica un elenco di parametri di tipo, è necessario racchiuderlo tra parentesi ed è necessario introdurre l'elenco con la parola chiave Of. Si usa Of una sola volta, all'inizio dell'elenco.

  • Vincoli. Un elenco di vincoli su un parametro di tipo può includere gli elementi seguenti in qualsiasi combinazione:

    • Numero qualsiasi di interfacce. Il tipo fornito deve implementare ogni interfaccia in questo elenco.

    • Al massimo una classe. Il tipo fornito deve ereditare da tale classe.

    • La parola chiave New. Il tipo fornito deve esporre un costruttore senza parametri a cui può accedere il tipo generico. Ciò è utile se si vincola un parametro di tipo da una o più interfacce. Un tipo che implementa le interfacce non espone necessariamente un costruttore e, a seconda del livello di accesso di un costruttore, il codice all'interno del tipo generico potrebbe non essere in grado di accedervi.

    • Parola chiave Class o parola chiave Structure. La parola chiave Class vincola un parametro di tipo generico per richiedere che qualsiasi argomento di tipo passato sia un tipo riferimento, ad esempio una stringa, una matrice o un delegato o un oggetto creato da una classe. La parola chiave Structure vincola un parametro di tipo generico per richiedere che qualsiasi argomento di tipo passato sia un tipo valore, ad esempio una struttura, un'enumerazione o un tipo di dati elementare. Non è possibile includere sia Class che Structure nello stesso oggetto constraintlist.

    Il tipo fornito deve soddisfare ogni requisito incluso in constraintlist.

    I vincoli per ogni parametro di tipo sono indipendenti dai vincoli per altri parametri di tipo.

Comportamento

  • Sostituzione in fase di compilazione. Quando si crea un tipo costruito da un elemento di programmazione generico, si specifica un tipo definito per ogni parametro di tipo. Il compilatore Visual Basic sostituisce il tipo fornito per ogni occorrenza di typename all'interno dell'elemento generico.

  • Assenza di vincoli. Se non si specificano vincoli per un parametro di tipo, il codice è limitato alle operazioni e ai membri supportati dal Tipo di dati oggetto per tale parametro di tipo.

Esempio 1

Nell'esempio seguente viene illustrata una definizione skeleton di una classe di dizionario generico, inclusa una funzione skeleton per aggiungere una nuova voce al dizionario.

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

Esempio 2

Poiché dictionary è generico, il codice che lo usa può creare un'ampia gamma di oggetti da esso, ognuno con la stessa funzionalità, ma operando su un tipo di dati diverso. Nell'esempio seguente viene illustrata una riga di codice che crea un oggetto dictionary con voci String e chiavi Integer.

Dim dictInt As New dictionary(Of String, Integer)

Esempio 3

Nell'esempio seguente viene illustrata la definizione di skeleton equivalente generata dall'esempio precedente.

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

Vedi anche