Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1909, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

La classe Lazy(Of T) con Visual Basic 2010

.NET Framework 4.0 introduce alcune nuove classi. Una di queste si chiama Lazy(Of T) e, tra i suoi scopi, consente di avere a disposizione un oggetto ma di non allocarne il valore in memoria finchè non viene effettivamente utilizzato (una sorta di lazy loading per i tipi .NET).

 

L’utilizzo più semplice di Lazy è quello mostrato nel seguente codice VB 2010:

 

'Una lambda stabilisce qual è il valore della stringa

'da restituire

Dim lazyString As New Lazy(Of String)(Function()

                                          Return "Messaggio di prova"

                                      End Function)

 

'Non assegna ancora il valore per l'oggetto, quindi

'non alloca memoria

Console.WriteLine(lazyString.IsValueCreated.ToString)

'Nel momento in cui l'utilizzo del valore è richiesto, lo assegna

Console.WriteLine(lazyString.Value)

'Il valore è ora disponibile

Console.WriteLine(lazyString.IsValueCreated.ToString)

 

La dichiarazione di istanza di Lazy riceve il tipo da utilizzare (essendo generica) e, come argomento, si può passare una lambda che restituisce il valore che l’istanza deve contenere. In altre parole, Lazy ha una proprietà Value che però è in sola lettura. La lambda fa sì che, al momento richiesto, venga restituito un qualcosa che viene “mappato” dalla proprietà Value che potrà poi essere letta. Per verificare che effettivamente il valore non sia stato ancora creato, si utilizza la proprietà booleana IsValueCreated che, in prima battuta, è False pur avendo istanziato l’oggetto. Nel momento in cui vado effettivamente ad utilizzare il valore, quindi semplicemente accedendo alla proprietà Value, il valore stesso viene creato, come dimostra il successivo accesso a IsValueCreated.

 

Il codice di cui sopra produce il seguente risultato:

 

False

Messaggio di prova

True

 

Tra gli overload del costruttore di Lazy(Of T) ce ne sono anche un paio che permettono di specificare la modalità di threading. La documentazione MSDN della classe è a questo indirizzo.

 

Alessandro

Print | posted on lunedì 3 agosto 2009 15:04 | Filed Under [ .NET Framework Visual Basic Visual Studio 2010 ]

Powered by:
Powered By Subtext Powered By ASP.NET