Introduzione a Visual Basic 9

4 pagine in totale: <<Indietro 1 [2] 3 4 Avanti >>

Inizializzatori di oggetti e collezioni

Nell'obiettivo di risparmiare tempo nella stesura di codice ripetitivo, in VB 9 possiamo istanziare un tipo valorizzandone le proprietà in modo compatto. Consideriamo per esempio questa classe:

Public Class Product
    Private _id As Integer
    Private _description As String
    Private _price As Decimal

    Public Sub New(ByVal id As Integer)
        Me._id = id
    End Sub

    Public ReadOnly Property Id() As Integer
        Get
            Return Me._id
        End Get
    End Property

    Public Property Description() As String
        Get
            Return _description
        End Get
        Set(ByVal value As String)
            _description = value
        End Set
    End Property

    Public Property Price() As Decimal
        Get
            Return _price
        End Get
        Set(ByVal value As Decimal)
            _price = value
        End Set
    End Property

End Class

Possiamo instanziare la classe Product valorizzando sulla stessa linea, con la parola chiave With, le proprietà. Ecco un esempio:

Dim p As New Product(1) With {.Description = "Descrizione 1", .Price = 100}
Dim p2 As Product = New Product(2) With {.Description = "Descrizione 2", .Price = 100}

Istanziamo la classe nel solito modo, eventualmente omettendo le parentesi se non sono previsti parametri al costruttore, facciamo seguire With e tra parentesi graffe la lista di nomi delle proprietà precedute dal punto e separate dalla virgola.

Possiamo inoltre, in modo analogo all'assegnazione degli array, valorizzare da subito le collezioni, senza chiamare molteplici volte il metodo Add che, combinato all'inizializzazione degli oggetti, offre notevoli vantaggi nella stesura del codice:

Dim s As New List(Of String) = { "a", "b" }
Dim list As New List(Of Product) = {New Product(1) With {.Description = "Descrizione 1", .Price = 100}, _
                   New Product(2) With {.Description = "Descrizione 2", .Price = 100}}

Per sfruttare questa caratteristica occorre che il tipo (nell'esempio List(Of T)) implementi almeno IEnumerable e disponga di un metodo visibile Add (non legato a particolari interfacce), poiché il codice autogenerato del compilatore si traduce in chiamate a tale metodo.

Tipi anonimi

Sempre ai fini di velocizzare la stesura del codice e per venire in contro alle necessità di LINQ, possiamo istanziare e far creare automaticamente al compilatore una classe con specifiche proprietà. Ciò lo otteniamo omettendo il nome del tipo che vogliamo instanziare e utilizzando la parola chiave With:

Dim a = New With {.Name = "Christian", .Surname = "Civera"}
a.Name = "Cristian"
' Restituisce { Name = Cristian, Surname = Civera }
Console.WriteLine(a)

Nell'esempio precedente, l'uso dei tipi impliciti è obbligatorio visto che non si conosce il nome della classe, ma possiamo comunque lavorare su una classe avente le proprietà in lettura e scrittura Name e Surname con il tipo inferito dalla loro dichiarazione (nell'esempio entrambe stringhe) e con pieno supporto all'intellisense. La classe autogenerata, inoltre, sovrascrive il metodo ToString per stampare tutte le proprietà, sovrascrive GetHashCode e Equals per dare il medesimo risultato in presenza delle proprietà valorizzate in egual modo su istanze diverse e la classe implementa in aggiunta anche l'interfaccia IEquatable(Of T). I tipi anonimi sono di tipo Friend e non differiscono in nessun modo dalle normali classi: le proprietà fanno uso di campi interni per mantenere il valore.

4 pagine in totale: <<Indietro 1 [2] 3 4 Avanti >>

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.



TUTORIALS


IN EVIDENZA
MISC