Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Le novità  del .NET Framework 4.0: Dynamic Language Runtime

Le novità del .NET Framework 4.0: Dynamic Language Runtime
Le novità del .NET Framework 4.0: Dynamic Language Runtime
Link copiato negli appunti

Il Dynamic Language Runtime è una delle novità  maggiori del nuovo .NET Framework 4.0. Il DLR è un nuovo ambiente di runtime che arricchisce il Common Language Runtime esistente di nuove funzionalità  mirate al supporto dei linguaggi dinamici quali Lisp, Smalltalk, JavaScript, PHP, Ruby, Python, ColdFusion, etc.

Oltre a questo, sono state anche aggiunte funzionalità  dinamiche ai già  presenti linguaggi statici del Framework (C# e VB.NET). àˆ stato infatti aggiunto un nuovo namespace, System.Dynamic, in cui sono presenti nuovi tipi che consentono la gestione di codice dinamico. Una delle possibilità  più interessanti è quella di creare in C# una variabile di tipo dynamic in maniera molto simile (ma non uguale) a quanto si poteva già  fare in VB con la keyword Dim.

Questa nuova parola chiave indica che l'oggetto creato non ha un tipo predefinito in quanto può essere valutato e cambiato a runtime (processo chiamato Late Binding). L'utilità  della keyword dynamic è evidente ogni qual volta abbiamo a che fare con oggetti COM, con oggetti di linguaggi dinamici come IronPython, con il Document Object Model (DOM) dell'HTML oppure con assembly caricati tramite reflection. In tutti questi casi in passato eravamo costretti a scrivere codice poco leggibile e complicato per poter accedere a proprietà  e metodi di questi oggetti perchè di essi non abbiamo le meta informazioni necessarie che ci forniscano la struttura degli stessi. Ora con la nuova keyword dynamic tutto cià diventa semplice e quasi banale.

Ecco degli esempi di dichiarazioni dynamic:

dynamic myObj = "questa è una stringa"; // qui myObj è una stringa
myObj = true; // qui diventa un boolean
myObj = 15; // qui diventa un intero

Ma la vera utilità  dei tipi dynamic si ha quando abbiamo a che fare con classi custom provenienti da "ambienti dinamici" come detto poc'anzi. Immaginiamo quindi di avere per esempio una classe così formata:

class MyClass
{
    public MyClass() { }
    public string GetValue(int i) { }
    public string GetValue(string s) { }
}

Normalmente il seguente codice darebbe errore in fase di compilazione:

MyClass myC = new MyClass();
myC.GetValue();

Il motivo è che il controllo statico sul tipo (static type checking) si accorge che la classe non contiene alcun overload del metodo GetValue che non accetta alcun parametro e quindi solleva una eccezione in fase di compilazione. Se invece dichiarassimo lo stesso oggetto con la keyword dynamic le cose andrebbero diversamente:

dynamic myC = new MyClass();
myC.GetValue();

In questo secondo caso, non avremmo alcun errore di compilazione in quanto il controllo statico sul tipo non avviene. Ovviamente in questo esempio abbiamo utilizzato una classe creata da noi stessi e quindi l'utilità  è limitata mentre nel caso in cui ci trovassimo dinanzi ad oggetti COM o come detto precedentemente oggetti provenienti da ambienti dinamici come JavaScript o il DOM di una pagina HTML, allora l'utilità  della keyword dynamic diventerebbe evidente.

Ti consigliamo anche