2008-10-31 11 views
13

¿De qué sirve si al llamar al método, es posible que no exista?¿Cuál es el uso práctico de la variable "dinámica" en C# 4.0?

¿Eso significa que podría crear dinámicamente un método en un objeto dinámico?

¿Cuál es el uso práctico de esto?

+0

sentimos el enlace anterior no parece estar funcionando correctamente, comienzan a http://microsoftpdc.com/ y se puede navegar a través de la sesión para llegar al video. – MrJavaGuy

+0

Publicaciones relacionadas [aquí] (https://stackoverflow.com/q/2690623/465053) y [aquí] (https://stackoverflow.com/q/2255982/465053) – RBT

Respuesta

14

realidad, no se podrán crear dinámicamente el método - pero se puede obtener una implementación de IDynamicMetaObject (a menudo mediante la extensión de DynamicObject) para responder como si no existiera el método.

Usos:

  • Programación contra objetos COM con un API débil (por ejemplo, oficina)
  • poner en lenguajes dinámicos como Ruby/Python
  • hacen potencialmente objetos "explorables" - imaginar un XPath- como consulta, pero a través de un método/llamadas de propiedad, por ejemplo, document.RootElement.Person[5].Name["Attribute"]
  • Sin duda, muchos más que todavía tienen que pensar :)
+2

Me gusta mucho la idea de XML. ¿Esto implicaría algún tipo de bolsa de propiedad personalizada? – tsilb

+0

Sería un poco como una bolsa de propiedades, pero espero que envuelva el LINQ en objetos XML y busque elementos cuando sea necesario en lugar de buscarlos en la creación. Los nombres han cambiado un poco desde que escribí esto - Actualizaré ... –

3

En primer lugar, no se puede utilizar 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 posibilidad de crearlos todavía o planeado).

Es más bien como un objeto de sistema, excepto que puede llamar a métodos que el compilador desconoce y que el tiempo de ejecución averigua cómo llamar.

+1

En realidad, existe tal facilidad, ExpandoObject. – Kaerber

1

Los dos biggies que puedo pensar son el tipado de pato y la capacidad de usar C# como lenguaje de scripting en aplicaciones, similar a javascript y Python. Ese último me hace llorar un poco.

0

Veo que se escriben varias estructuras ORM dinámicas. O diablos escribe uno tú mismo.

Estoy de acuerdo con Jon Skeet, es posible que vea algunas formas interesantes de explorar objetos. Tal vez con selectores como jQuery.

Llamar a COM y llamar a Dynamic Languages.

Estoy esperando ver si hay una manera de hacer un método missing de Ruby.

1

Piense en ello 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 }); 

Se obtiene lo siguiente:

IDynamicObject value = GetSomeObject(); 
value.DoSomething(1, 2, 3); 
+0

es una pena que el ejemplo no funcione. quería usarlo en un curso que estoy enseñando –

Cuestiones relacionadas