Automatic Properties
Prima di passare all'opera con LINQ, bisogna preparare l'ambiente. Per prima cosa bisogna creare una lista da interrogare. Per semplicità, creiamo una lista di oggetti Persona composta da 3 proprietà: Nome, Cognome, Eta.
//C#
public class Persona{
public string Nome { get; set; }
public string Cognome { get; set; }
public int Eta { get; set; }
}Da questo snippet si può già notare una nuova feature presente nel C# 3.0 ma non nel VB 9: le Automatic Properties. Molto spesso scrivere una proprietà è una cosa ripetitiva: prima bisogna dichiarare un campo privato e poi bisogna esporlo con i getter e setter di una proprietà; questi metodi non fanno altro che impostare e restituire il valore dell'attributo. Qualora non vi sia alcuna necessità di inserire codice aggiuntivo nel getter e nel setter, si può omettere la dichiarazione del membro privato e dichiarare la proprietà con le sole parole chiave get e set senza dichiararne il corpo. In fase di compilazione, verrà automaticamente creato il campo privato ed il codice dei metodi get e set per esporre il campo. Grazie a questa nuova sintassi si può risparmiare molto tempo nella scrittura di una classe.
Nel caso si voglia inserire del codice all'interno del getter o del setter della proprietà, questa sintassi non può essere sfruttata e quindi si deve scrivere esplicitamente il codice per dichiarare sia il campo privato che la proprietà.
Object Initializer
Una volta dichiarato un oggetto, si devono impostare anche alcune delle sue proprietà per poterlo utilizzare. Spesso si ricorre ad un costruttore per questo genere di operazioni, ma quando si ha bisogno di aggiungere un parametro e non si ha a disposizione il codice sorgente della classe, la cosa non è fattibile e quindi si deve impostare la proprietà con una seconda riga di codice.
Per permettere la creazione di un oggetto e l'impostazione delle proprietà nella stessa riga di codice si può ricorrere agli Object Initializers.
//C#
Persona p = new Persona { Nome = "Sefano", Cognome = "Mostarda", Eta = 28 };
'VB
Dim p As New Persona With {.Nome = "Stefano", .Cognome = "Mostarda", .Eta = 28}In fase di compilazione, questo codice viene convertito nei seguenti passi:
- Creazione della classe sfruttando il costruttore senza parametri
- Assegnazione delle proprietà una ad una.
Grazie a questa sintassi molto compatta si può inizializzare un oggetto in maniera molto semplice ed in una sola riga di codice.
Se la classe non mette a disposizione un costruttore senza parametri, bisogna istanziarla normalmente (passando cioè i parametri del costruttore tra parentesi tonde) e poi sfruttare questa sintassi per valorizzare le altre proprietà.
Collection Initializer
A questo punto abbiamo a disposizione la classe ed un modo per istanziarla in una sola riga di codice. Quello che manca è inizializzare una lista su cui poi eseguire delle query con LINQ To Objects. Così come è avvenuto per le proprietà di una classe, anche per le liste è stato introdotto un meccanismo per inserire dei valori nella stessa istruzione di istanziazione.
//C#
List persone = new List(){
new Persona { Nome = "Stefano", Cognome = "Mostarda", Eta = 28 },
new Persona { Nome = "Daniele", Cognome = "Bochicchio", Eta = 28 },
new Persona { Nome = "Cristian", Cognome = "Civera", Eta = 25 },
new Persona { Nome = "Marco", Cognome = "Leoncini", Eta = 32 },
new Persona { Nome = "Alessio", Cognome = "Leoncini", Eta = 32 },
new Persona { Nome = "Ugo", Cognome = "Lattanzi", Eta = 29 },
new Persona { Nome = "Riccardo", Cognome = "Golia", Eta = 35 },
new Persona { Nome = "Cristian", Cognome = "Paparelli", Eta = 33 },
new Persona { Nome = "Matteo", Cognome = "Casati", Eta = 29 },
new Persona { Nome = "Andrea", Cognome = "Zani", Eta = 36 },
};
'VB
Dim persone As New List(Of Persona) = { _
New Persona With { .Nome = "Stefano", .Cognome = "Mostarda", .Eta = 28 }, _
New Persona With { .Nome = "Daniele", .Cognome = "Bochicchio", .Eta = 28 }, _
New Persona With { .Nome = "Cristian", .Cognome = "Civera", .Eta = 25 }, _
New Persona With { .Nome = "Marco", .Cognome = "Leoncini", .Eta = 32 }, _
New Persona With { .Nome = "Alessio", .Cognome = "Leoncini", .Eta = 32 }, _
New Persona With { .Nome = "Ugo", .Cognome = "Lattanzi", .Eta = 29 }, _
New Persona With { .Nome = "Riccardo", .Cognome = "Golia", .Eta = 35 }, _
New Persona With { .Nome = "Cristian", .Cognome = "Paparelli", .Eta = 33 }, _
New Persona With { .Nome = "Matteo", .Cognome = "Casati", .Eta = 29 }, _
New Persona With { .Nome = "Andrea", .Cognome = "Zani", .Eta = 36 }} In fase di compilazione questo statement viene suddiviso in diverse fasi: prima viene istanziata la lista, poi per ogni elemento da aggiungere viene istanziata una classe, ne vengono impostate le proprietà e la si aggiunge alla lista.
Tutto questo codice lo possiamo risparmiare con questa sintassi molto più compatta ed anche più comprensibile per lo sviluppatore.
Contenuti dell'articolo
- Pagina 1
- Pagina 2
- Pagina 3
- Pagina 4
- Pagina 5
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.





Difficoltà
Stampa
Download 




Pagina 2, paragrafo "Object Initializer":"Se la classe non mette a disposizione un parametro senza costruttori.."forse si intendeva un "..costruttore ...
Continua »»» | Rispondi »»»