¿Cuál es el uso práctico de & # 8220; dynamic & # 8221; variable en C # 4.0?

StackOverflow https://stackoverflow.com/questions/253460

  •  05-07-2019
  •  | 
  •  

Pregunta

¿Cuál es su uso si cuando llama 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?

¿Fue útil?

Solución

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 existía .

Usos:

  • Programación contra objetos COM con una API débil (por ejemplo, office)
  • Llamar a lenguajes dinámicos como Ruby / Python
  • Potencialmente haciendo " explorable " objetos: imagine una consulta similar a XPath pero a través de un método / propiedad llamadas, por ejemplo. document.RootElement.Person[5?.Name["Attribute"?
  • Sin duda, muchos más aún no hemos pensado :)

Otros consejos

En primer lugar, no puedes usarlo ahora. Es parte de C # 4, que se lanzará en el futuro.

Básicamente, es para un objeto, cuyas propiedades no se conocerán hasta el tiempo de ejecución. Tal vez se trata de un objeto COM. Quizás es un " definir en el objeto de vuelo " como lo describe (aunque no creo que haya una facilidad para crearlas aún o planeadas).

Es como un objeto System.Object, excepto que se te permite llamar a métodos que el compilador no conoce, y que el tiempo de ejecución se da cuenta de cómo llamar.

Los dos grandes personajes que se me ocurren son la tipografía de pato y la capacidad de usar C # como lenguaje de scripting en aplicaciones, similar a javascript y Python . Eso último me hace romper un poco.

Piensa 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 });

Obtienes esto:

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

Veo que se escriben varios marcos ORM dinámicos. O bien, escribe uno tú mismo.

Estoy de acuerdo con Jon Skeet, puede que veas algunas formas interesantes de explorar objetos. Tal vez con selectores como jQuery.

Llamando a COM y llamando a Dynamic Languages.

Estoy ansioso por ver si hay una manera de hacer un método faltante tipo Ruby.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top