¿Cuál es el uso práctico de la variable "dinámica" en C#4.0?
.net c#-4.0 (5)
Antes que nada, no puedes usarlo ahora. Es parte de C # 4, que se lanzará en algún momento en el futuro.
Básicamente, es para un objeto, cuyas propiedades no se conocerán hasta el tiempo de ejecución. Tal vez proviene de un objeto COM. Tal vez sea un "definir sobre la marcha del objeto" como usted describe (aunque no creo que haya una facilidad para crearlos aún o planeado).
Es más bien como un objeto del sistema, excepto que puede llamar a métodos que el compilador desconoce y que el tiempo de ejecución averigua cómo llamar.
¿Cuál es su uso si al llamar al método, es posible que no exista?
¿Eso significa que sería capaz de crear dinámicamente un método en un objeto dinámico?
¿Cuál es el uso práctico de esto?
Los dos biggies en los que puedo pensar son el tipado de patos y la capacidad de usar C # como lenguaje de scripting en aplicaciones, similar a javascript y Python . Ese último me hace llorar un poco.
Piénselo como una forma simplificada de Reflexión. En lugar de esto:
object value = GetSomeObject();
Method method = value.GetType().GetMethod("DoSomething");
method.Invoke(value, new object[] { 1, 2, 3 });
Obtienes esto:
IDynamicObject value = GetSomeObject();
value.DoSomething(1, 2, 3);
Veo varios frameworks ORM dinámicos siendo escritos. O diablos escribe uno tú mismo.
Estoy de acuerdo con Jon Skeet, es posible que veas algunas formas interesantes de explorar objetos. Tal vez con selectores como jQuery.
Llamar a COM y llamar a Dynamic Languages.
Estoy ansioso por ver si hay una manera de hacer un método missing de Ruby.
Realmente no podrá crear dinámicamente el método, pero puede obtener una implementación de IDynamicMetaObject
(a menudo extendiendo DynamicObject
) para responder como si el método existiera .
Usos:
- Programación contra objetos COM con una API débil (p. Ej. Oficina)
- Llamar a lenguajes dinámicos como Ruby / Python
- Posiblemente crear objetos "explorables": imagine una consulta similar a XPath pero a través de un método / llamadas de propiedad, por ejemplo,
document.RootElement.Person[5].Name["Attribute"]
- Sin duda, hay muchos más en los que aún tenemos que pensar :)