Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 |
Opzionale. 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 |
Opzionale. 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
Ofuna 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
Classchiave o parolaStructurechiave . LaClassparola chiave 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. LaStructureparola chiave 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 eClassStructurenello stessoconstraintlistoggetto .
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
Compile-Time sostituzione. 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 dell'elemento
typenamegenerico.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 Object per tale parametro di tipo.
Esempio 1
Nell'esempio seguente viene illustrata una definizione scheletra 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 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