Hay un montón de casos en la que son ya usando tipado dinámico y dinámico vinculante hoy. Simplemente no te das cuenta, porque todo está oculto detrás de cadenas o System.Object
, ya que hasta C# 4, el soporte necesario no estaba allí.
Un ejemplo es la interoperabilidad COM: COM es en realidad un sistema de objetos semidinámico. Cuando se hace interoperabilidad COM, muchos métodos realmente devuelven un objeto dinámico, pero debido a que C# no los admite, se devolvieron como System.Object
y tuvo que realizarlos usted mismo, posiblemente detectando excepciones en el camino.
Otro ejemplo es interactuar con datos tipeados dinámicamente (o incluso sin tipo), como JSON, CSV, HTML, schemaless XML, servicios web sin esquema, bases de datos sin esquema (que son, después de todo, el nuevo hotness). Hoy, usas cadenas para aquellos.Una API XML se vería como
var doc = new XmlDocument("/path/to/file.xml");
var baz = doc.GetElement("foo").GetElement("qux");
y así sucesivamente. Pero ¿qué tal:
dynamic doc = new XmlDocument("/path/to/file.xml");
var baz = doc.foo.qux;
¿No parece agradable?
Un tercer ejemplo es la reflexión. Hoy, la invocación de un método a través de la reflexión se hace pasando una cadena al InvokeMember
(o lo que sea que se llame). ¿No sería más agradable, ya sabes, solo invocar la maldita cosa?
Luego, hay generación de datos dinámicos (básicamente lo opuesto al segundo ejemplo). He aquí un ejemplo de cómo generar algo de XML dinámico:
dynamic doc = new XmlBuilder();
doc.articles(id=42, type="List",() => {
article(() => {
number(42);
title("blahblubb");});});
Esto no es tan hermoso como el rubí equivalente, pero es lo mejor que podía llegar a en tan poco tiempo :-)
Y por último pero ciertamente no menos importante, la integración con un lenguaje de tipado dinámico. Ya sea que se trate de JavaScript en una aplicación de Silverlight, un motor de reglas personalizado incrustado en su aplicación comercial o una instancia de DLR que usted aloja en su programa CAD/IDE/editor de texto.
Ver: http://stackoverflow.com/questions/253460/what-is- the-practical-use-of-dynamic-variable-in-c-4-0 –
Aparte de los objetos COM, estoy firmemente de la opinión de que no son particularmente útiles en C# /. NET, y una mejor solución casi siempre existe ... – Noldorin
Ah, y la interoperabilidad con lenguajes dinámicos como IronPython por supuesto. Es puro C#, no tiene lugar, sin embargo. – Noldorin