C# 4.0 Il tipo dynamic
Link sponsorizzati
Nella futura versione del C# è stato aggiunto un nuovo tipo, chiamato dynamic. Questo è un oggetto generico che può contenere qualsiasi cosa, il suo tipo viene risolto a run tyme. Questo significa che è possibile assegnare ad una variabile di tipo dynamic qualsiasi cosa.
Tanto per fare un esempio.
Link sponsorizzati
{
return 1;
}
private string str()
{
return "0";
}
//---
dynamic d;
if (Convert.ToBoolean(new Random().Next(2)))
d = num();
else
d = str();
d += 1;
MessageBox.Show(d.ToString());
Questo codice non fa altro che assegnare ad una variabile dinamica il valore di ritorno di una delle due funzioni (a seconda del valore random generato). Nell’ultima riga prima del MessageBox c’è questa istruzione d += 1;. Questo vale a dire che se la variabile dinamica è un intero restituirà un 2 perchè verrà fatta la somma diretta, mentre se è una stringa riceveremo ’01′ perchè viene effettuata la concatenazione.
In C# esistono altri tipi generici, ad esempio object (o var). La differenza con dynamic sta nel fatto che una variabile object viene risolta in fase di compilazione, mentre dynamic in fase di esecuzione. Questo a livello di codice ha un peso non indifferente, infatti non possono essere chiamati metodi direttamente senza far uso di un casting (nel caso in cui si utilizza un object).
In questo caso il compilatore ci restituirà un errore perchè la varibile b è un oggetto System.Object e quindi non contiene la definizione di Visible (bisognerebbe risolvere con un casting). D’altro canto invece per dynamic non ci sono problemi, difatti in linea di massima si può chiamare qualsiasi metodo in una variabile dinamica. L’esistenza o meno del metodo o della proprietà da chiamare viene risolta a run time, se non esistono viene sollevata un’eccezione.
La differenza sostanziale tra object, var e dynamic possiamo sintezzarla così
- object è soltanto l’abbreviazione di System.Object, cioè implica che quello è un oggetto ben definito e ci si può lavorare solo utilizzando i metodi e attributi definiti per tale oggetto.
- var è molto restrittiva, deve essere per forza dichiarata inline (var x = y, e y non può essere omosso o inserito dopo) e, per tutta la sua vita, potrà contenere soltanto oggetti del tipo specificato durante la dichiarazione.
- dynamic, come detto, è a tutti gli effetti un tipo dinamico che viene risolto in fase di esecuzione e garantisce una buona flessibilità.
Link sponsorizzati

