Passa ai contenuti principali

Post

Visualizzazione dei post con l'etichetta .NET Framework

Rilasciata la versione 3 di Async CTP

In attesa di avere, “di serie”, la programmazione asincrona a task all’interno di Visual Studio e del framework (sarà presente in Dev11), è stata rilasciata la versione 3 di Async CTP. Async CTP è un pacchetto che introduce la programmazione asincrona a task (che semplifica di molto la scrittura del codice multithread) all’interno di Visual Studio 2010. Async CTP, di fatto, introduce nuove parole chiave e tutta l’infrastruttura che permette al compilatore di gestirle. Per maggiori info sulla programmazione asincrona a task, vi consiglio il link: http://msdn.microsoft.com/en-us/vstudio/gg316360 Per il download del pacchetto di installazione di Async CTP 3, potete utilizzare il link: http://www.microsoft.com/download/en/details.aspx?id=9983 La versione 3 di Async CTP è compatibile con le installazioni non in lingua inglese di VS, Silverlight 5 e Roslyn ed include una EULA ( http://it.wikipedia.org/wiki/EULA ) che ne permette (ma non incoraggia) l’utilizzo della stessa in produz

La classe Lazy(Of T)

Una interessante classe inserita nella versione 4.0 del framework è la Lazy(Of T). Si tratta di un generic il cui scopo è quello di permettere la creazione di oggetti differita. Uno scenario tipico che può capitare quando sviluppiamo è quello di avere una nostra classe che occupa molte risorse (memoria, accesso a database, accesso a filesystem, e via discorrendo) e desiderare che tale classe venga istanziata solo quando serve. In più, alcune volte, sarebbe anche comodo poter avere un accesso concorrente a tale istanza. Se il primo requisito è facilmente implementabile con un manciata di righe di codice, il secondo non è altrettanto banale. La classe Lazy(Of T) ci viene in aiuto perché è, di fatto, un wrapper che gestisce la creazione dell’istanza del tipo T e il thread safe in maniera nativa. La classe Lazy prevede una serie di costruttori il più semplice dei quali non prevede argomenti. Sia MyClass la nostra classe di cui vogliamo gestire la creazione differita: Publ

Creare uno shortcut con VB.NET

Prendendo spunto da un post comparso sul forum MSDN vorrei proporvi un tip su come creare uno shortcut utilizzando VB.NET. Per poter creare uno shortcut possiamo procedere in due modi: o ci studiamo la struttura del file .lnk e scriviamo una classe che è in grado di ricreare tale struttura oppure utilizziamo Windows Scripting Host. La prima soluzione è percorribile ma laboriosa perchè la struttura di un file lnk non è banale. Chi fosse interessato a vedere come è composto, internamente, un file lnk può scaricare la seguente reference guide ( link ). Io vorrei proporvi la seconda strada e realizzerò una classe che incapsula l’utilizzo di Windows Scripting Host. L’object model di Windows Scripting Host è contenuto nella dll IWshRuntimeLibrary che può essere referenziata, nel nostro progetto, utilizzando il tab COM della finestra di aggiunta delle reference: Tra gli oggetti che troviamo all’interno della libreria utilizzeremo la classe WshShell e la classe WshShortcut. La pr

Gli enumeratori e Visual Basic

Una delle novità presentate alla PDC2010 riguarda le specifiche di linguaggio per Visual Basic che permettono di implementare gli iteratori. Per chi sviluppa in C#, gli iteratori sono presenti fin dalla versione 2.0 del Framework mentre per gli sviluppatori VB tali oggetti non esistevano. Partiamo con la definizione di iteratore: un iteratore è oggetto che permette di scandire il contenuto di una lista. La parola chiave che si utilizza per definire il “ritorno” di uno degli oggetti della lista è yield che viene anteposta all’istanza da restuire. L’insieme degli yield deve essere posto all’interno di un metodo (di tipo function) che restituisca IEnumerator, IEnumerator(Of T), IEnumerable o IEnumerable(Of T). Facciamo subito un esempio molto semplice: vogliamo creare un iteratore che dia la possibilità di iterare sui primi 5 numeri interi: Sub Main()      For Each intero In Get5Numeri()          Console .WriteLine(intero)      Next End Sub   Private Iterator F

System.Numerics.BigInteger + Parallel.For …… ed il fattoriale è servito!!

Uno dei sogni dei matematici di tutti i tempi è quello di calcolare il fattoriale di un qualsiasi numero intero. Ora, con l’introduzione della structure BigInteger del namespace System.Numerics il sogno diventa realtà. La structure BigInteger consente di memorizzare un numero intero di qualsiasi dimensione: La struttura memorizza il numero intero utilizzando un array di UInt32 e il segno con un Int32. La struttura mette a disposizione una serie di metodi e di operatori che consentono di eseguire le usuali operazioni matematiche tra interi (anche utilizzando Int16, Int32 o Int64). Un esempio classico di utilizzo della BigInteger è il calcolo del fattoriale. Per chi non lo sapesse, il fattoriale si definisce nel seguente modo: In matematica, se n è un intero positivo, si definisce n fattoriale e si indica con n ! il prodotto dei primi n numeri interi positivi. In formule, per definizione si chiede poi che 0!=1 . La funzione fattoriale può anche essere defin

System.Numerics.Complex, finalmente risolviamo le equazioni di secondo grado!!!

Vorrei segnalarvi che nella versione 4.0 del framework è stato introdotto un nuovo namespace, chiamato System.Numerics, contenente dei tipi numerici che fino ad ora mancavano all’interno del framework: i numeri complessi e gli interi di dimensione non definita. In questo post ci occupiamo dei numeri complessi. Prima di vedere come sono implementati nel framework, vorrei richiamare alcuni concetti matematici. I numeri complessi sono un'estensione dei numeri reali nata inizialmente per consentire di trovare tutte le soluzioni delle equazioni polinomiali. Ad esempio, l'equazione non ha soluzioni reali, perché in questo insieme non esistono numeri il cui quadrato sia negativo. Si definisce allora il valore i , chiamato anche unità immaginaria, che gode della seguente proprietà: e dunque: I numeri complessi sono formati da due parti, una parte reale ed una parte immaginaria, e sono rappresentati dalla seguente espressione: dove a e b sono numeri reali, mentr