Elenco dei tipi (Visual Basic)

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

Sintassi

[genericmodifier] typename [ As constraintlist ]

Parti

Termine Definizione
genericmodifier Facoltativa. Può essere usato solo nelle interfacce generiche e nei delegati. È possibile dichiarare un tipo covariante usando la parola chiave Out o il controvariante usando la parola chiave In . Vedere Covarianza e controvarianza.
typename Obbligatorio. Nome del parametro di tipo. Si tratta di un segnaposto da sostituire da un tipo definito fornito dall'argomento di tipo corrispondente.
constraintlist Facoltativa. 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 dei vincoli con la parola chiave As . Si usa As una sola volta all'inizio dell'elenco.

Commenti

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 generica, una struttura, un'interfaccia, una routine o un delegato.

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 elemento dichiarati.

Regole

  • Parentesi. Se si specifica un elenco di parametri di tipo, è necessario racchiuderlo tra parentesi e è 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:

    • Qualsiasi numero 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 limita un parametro di tipo per 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.

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

    Il tipo fornito deve soddisfare ogni requisito incluso in constraintlist.

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

Comportamento

  • Compile-Time sostituzione. Quando si crea un tipo costruito da un elemento di programmazione generico, viene fornito un tipo definito per ogni parametro di tipo. Il compilatore Visual Basic sostituisce il tipo fornito per ogni occorrenza dell'elemento typename generico.

  • Assenza di vincoli. Se non si specificano vincoli su 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 di scheletro di una classe dizionario generica, inclusa una funzione scheletro 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 ha la stessa funzionalità ma agisce su un tipo di dati diverso. Nell'esempio seguente viene illustrata una riga di codice che crea un dictionary oggetto con String voci e Integer chiavi.

Dim dictInt As New dictionary(Of String, Integer)

Esempio 3

Nell'esempio seguente viene illustrata la definizione di scheletro 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