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.
F # tiene el? operador que usas como tal:
myVariable?SomePropertyThatIsNotDeclared
No hay una palabra clave dinámica equivalente. Eche un vistazo a este artículo para saber cómo usarlo https://weblogs.asp.net/podwysocki/using-and-abusing-the-f-dynamic-lookup-operator
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;