Dynamics en C#

 

Woow estuve leyendo acerca de las nuevas características que tiene C# para la versión 4 del Framework y me pareció excelente la inclusión de la palabra clave dynamic.
 
Esto permite, postergar, hasta el tiempo de ejecución , la evaluación de tipos. Es decir, en tiempo de compilación no se detectan errores de asignación de tipos.
 
La palabra dynamic permite indicarle al compilador que no efectúe la comprobación de asignación de tipos.
 
En el artículo que se encuentra aca:
http://msdn.microsoft.com/en-us/magazine/gg598922.aspx
 
Se hace una diferenciación clara de lo que son las definiciones con: object, var y dynamic.
 
var: Permite inferir el tipo, pero si hay un error en la asignación de tipos, el compilador lo detecta.
object: Tipo básico de todos los objetos de .NET siempre es necesario efectuar Cast, para hacer la asignación de tipos y que no se genere error en tiempo de compilación.
dynamic: Permite postergar la detección de errores por asignación de tipos hasta el tiempo de ejecución. En tiempo de compilación no se reportan errores.
 
Desde mi punto de vista de desarrollador y relacionado a lo que, normalmente, trabajo. Lo que más me gustó, en cuanto al uso de dynamic, es en los siguientes escenarios:
 
Interoperación con otros lenguajes o frameworks
 
Sin dynamic se tendría que acceder a la característica de Reflexión, para poder acceder a los métodos de un objeto o assembly, con el que se desee interactuar.
 
Ejemplo:
 
1.  object calc = GetCalculator();
2.  Type calcType = calc.GetType();
3.  object res = calcType.InvokeMember(
4.    "Add", BindingFlags.InvokeMethod,
5.    null, new object[] { 10, 20 });
6.  int sum = Convert.ToInt32(res);


Usando dynamic es más simple y fácil de comprender el código:
 
dynamic calc = GetCalculator();int sum = calc.Add(10, 20);
Agregar métodos dinámicamente a objetos
 
1.  dynamic expando = new ExpandoObject();2.  expando.SampleProperty = 3.    "This property was added at run time";4.  expando.SampleMethod = (Action)(5.    () => Console.WriteLine(expando.SampleProperty));6.  expando.SampleMethod();Interoperar con COM
 
Es decir, poder interoperar de una forma más fácil con Office, esta fue la meta de Microsoft al extender C# con dynamic y, en general, el framework DLR ( Dynamic Languaje Runtime)
 
Ejemplo:
 
1.  // Add this line to the beginning of the file:

2.  // using Excel = Microsoft.Office.Interop.Excel;

3.  

4.  var excelApp = new Excel.Application();

5.  

6.  excelApp.Workbooks.Add();

7.  // excelApp.Workbooks.Add(Type.Missing);

8.  

9.  excelApp.Visible = true;

10.

11.Excel.Range targetRange = excelApp.Range["A1"];

12.// Excel.Range targetRange = excelApp.get_Range("A1", Type.Missing);

13.

14.targetRange.Value = "Name";

15.// targetRange.set_Value(Type.Missing, "Name");

16.

17.targetRange.Columns[1].AutoFit();

18.// ((Excel.Range)targetRange.Columns[1, Type.Missing]).AutoFit();

En comentarios se encuentra la forma como se tenía que escribir, antes, el mismo código. La facilidad y mejora son innegables.

Comentarios

Entradas populares de este blog

Visual Studio 2012 Backup and Restore bases de datos

Configuración de expresiones en Quartz

Hacer que Windows XP luzca como Windows 7