- I generics in VB .Net - |
|||
COSA SERVE PER QUESTO TUTORIAL | |||
Download | Chiedi sul FORUM | Glossario | conoscenze basiche di VB .Net | ||
Generics: liste, dizionari e utilizzo di classi e procedure generiche | |||
UN ESEMPIO APPLICATIVO DI GENERICS: LISTE E DIZIONARI Generics, l'operatore Of e le classi List e Dictionary La versione 2.0 del Framework .Net introduce, tra gli altri, un nuovo importante concetto: quello dei generics. I generics sono in sostanza paragonabili ai template di C++: permettono di utilizzare classi e metodi fornendogli anche un tipo come parametro. Vediamo subito un esempio per chiarire il concetto: Dim listaDiStringhe As New List(Of String)(2) listaDiStringhe.Add("prima stringa") listaDiStringhe.Add("seconda stringa") Dim listaDiInteri As New List(Of Integer)(2) listaDiInteri.Add(1) listaDiInteri.Add(2) Si noti la sintassi di New: prima dei parametri del costruttore (in questo caso il 2, la capacità iniziale della lista) è stato specificato tra parentesi il nuovo operatore Of seguito prima da String e in seguito da Integer. List (System.Collections.Generic.List) è una classe molto semplice ma efficace, permette infatti di creare liste dinamiche (ovvero una sorta di array dal quale è possibile aggiungere, rimuovere e inserire elementi in qualunque momento) di qualsiasi genere: l'uso dei generics (denotato dall'operatore Of) lo rende infatti indipendente dal tipo di dati che la lista deve contenere. Questo risulta molto utile in alcune occasioni e risolve problemi altrimenti aggirabili solamente creando una classe per ogni tipo di dati oppure tramite l'uso di Object, procedura assai inelegante. Infatti prima dell'introduzione dei generics erano diffuse classi del tipo StringList e StringDictionary (ancora disponibili in System.Collections.Specialized), oggi rimpiazzate dal codice precedente per StringList e da quanto segue per StringDictionary: 'Un dizionario di stringhe con chiave numerica Dim dizionario As New Dictionary(Of Integer, String) dizionario.Add(216, "contenuto") Console.WriteLine(dizionario(216)) Abbiamo qui creato un nuovo dizionario (System.Collections.Generic.Dictionary) le cui chiavi sono numeri interi e il contenuto stringhe.
UN ESEMPIO DI CLASSE CHE UTILIZZA I TEMPLATE Vediamo a questo punto come possiamo realizzare una classe che fa uso dei generics: Public Class ClasseGenerica(Of ParametroDiTipo) Public Function GetName() As String Return GetType(ParametroDiTipo).Name End Function End Class Questa semplice classe prende un parametro di tipo che viene identificato come ParametroDiTipo; esso può essere qualsiasi cosa, da Object a String, a Integer ad una struttura o altro. La funzione GetName non fa altro che restituirne il nome. Vediamo una riga di codice che stamperebbe il nome della classe: Console.WriteLine( ( New ClasseGenerica(Of String) ).GetName() ) Si noti che è anche possibile usare i generics anche solamente su un metodo, ad esempio: Public Function GetName(Of ParametroDiTipo)() As String Return GetType(ParametroDiTipo).Name End Function può essere richiamata tramite la seguente sintassi: Console.WriteLine( GetName(Of Integer)() )
CONFIGURAZIONE DELLE SESSIONI IN ASP.NET Vediamo ora come è possibile applicare restrizioni al tipo di dati passato ad una classe generica. Public Function GetNameBis(Of ParametroDiTipo As MiaClasse)() As String Return GetType(ParametroDiTipo).Name End Function Rispetto alla funzione precedente (GetName) è stato aggiunto As MiaClasse di seguito alla dichiarazione di un parametro di tipo: in questo modo è stato imposto che il tipo che viene passato deve essere o ereditare la classe MiaClasse. Al posto di una classe si potrebbero specificare un'interfaccia (costringendo a passare tipi che la implementino) oppure una delle seguenti parole chiave:
Queste restrizioni possono anche essere combinate tra loro come segue: Public Sub SalutaCon(Of ParametroDiTipo As {MiaInterfaccia, Class, New})() Dim ClasseIgnota As New ParametroDiTipo() ClasseIgnota.Saluta() End Sub Nota: la parola chiave New in una lista di restrizioni, se
presente, deve sempre apparire per ultima. Class MiaClasse Implements MiaInterfaccia Public Sub New() 'Nulla da fare End Sub Public Sub Saluta() Implements MiaInterfaccia.Saluta Console.WriteLine("Ciao!") End Sub End Class Interface MiaInterfaccia Sub Saluta() End Interface Per richiamare il metodo è sufficiente il codice seguente: SalutaCon(Of MiaClasse)() |
|||
<< INDIETRO | by VeNoM00 |