dynamic f# dynamic-language-runtime

dynamic - C#''s'' dinámico ''en F#



dynamic-language-runtime (4)

Un ejemplo del uso del DLR en C # es el siguiente:

dynamic dyn = new MyObject(); dyn.MyMethod(); //resolved at runtime

¿Cuál sería el equivalente en F #?

Gracias.


El ? el operador tiene un poder expresivo similar al de la palabra clave dynamic en C # (pero solo se puede utilizar para leer propiedades, invocar métodos y establecer propiedades).

No hay una implementación incorporada que le permita utilizar dinámicamente propiedades o métodos de una clase .NET (a través de Reflection o DLR), pero hay algunas implementaciones bastante sólidas de la comunidad. Esto ha sido discutido en otra pregunta de SO antes .

También hay implementaciones de ? que le permiten acceder a algunas fuentes de datos comunes, como las bases de datos SQL. Por ejemplo, este artículo de MSDN incluye una definición que le permite escribir db?Query?Foo(1) para llamar a un procedimiento almacenado llamado Foo .

Para varios otros tipos (como encontrar un elemento en XAML o acceder a elementos o atributos en un documento XML), la definición de ? Es bastante fácil de escribir.



Hay un paquete llamado FSharp.Interop.Dynamic y que hará posible realizar una llamada a un objeto dinámico utilizando el ? operador.


Por otro lado, si está intentando exponer dynamic comportamiento dynamic a C # desde F #, puede usar DynamicAttribute[MSDN] . Por ejemplo, declarar una propiedad dinámica podría verse como

type HasDynamicProperty() = [<Dynamic([|true|])>] member this.DynamicObject : obj = ...

que se utiliza de C # como

var hdp = new HasDynamicProperty(); dynamic dynObj = hdp.DynamicObject;