usuario una tipos procesando por objetos objeto lista fórmulas dinámicos dinámicamente dinamicos dinamico dinamicamente datos crear creadas controles agregar c# .net f# dynamic-language-runtime

c# - una - Acceso a objetos dinámicos F#



tipos de datos dinamicos c# (3)

¿Hay alguna forma de acceder a los objetos DLR (por ejemplo, instancia de subclase DynamicObject) miembros (propiedades y métodos) en F # que es similar a C # dynamic?


Sí lo es. Puedes usar ? operador en F #, y se realizará de la misma manera en el tipado dinámico en C # y VB.NET en .NET 4.0. Para empezar, puede leer este ejemplo Dynamic SQLDataReader del blog de Tomas Petricek:

http://tomasp.net/blog/dynamic-sql.aspx

Aquí hay una cita de su artículo:

En este artículo, veremos cómo usar el operador dinámico para mejorar dramáticamente la experiencia de usar ADO.NET desde F #. El operador dinámico (en realidad hay dos) es una forma simple de admitir la invocación dinámica en F #. Podemos usarlo para escribir código que se parece a una llamada de método ordinario o acceso a propiedades, pero se resuelve dinámicamente en tiempo de ejecución (usando el nombre del método o la propiedad). El siguiente ejemplo muestra lo que podremos escribir al final de este artículo:

// Call ''GetProducts'' procedure with ''CategoryID'' set to 1 use conn = new DynamicSqlConnection(connectionString) use cmd = conn?GetProducts cmd?CategoryID <- 1 conn.Open() // Read all products and print their names use reader = cmd.ExecuteReader() while reader.Read() do printfn "Product: %s" reader?ProductName

Si alguna vez intentó llamar a un procedimiento almacenado SQL directamente con SqlCommand, seguramente podrá apreciar la elegancia de este fragmento de código. Veamos ahora un ejemplo más amplio y algunos de los trucos que hacen que esto sea posible ...

Y para obtener más información, puede leer el resto de su artículo. Feliz codificación dinámica en F # :)


Ahora hay un módulo en nuget que usa el dlr para implementar el operador dinámico. FSharp.Interop.Dynamic

Tiene varias ventajas sobre muchos de los fragmentos que hay.

  • Rendimiento que utiliza Dynamitey para la llamada dlr que implementa el almacenamiento en caché y es una biblioteca PCL
  • Maneja los métodos que devuelven el vacío, obtendrá una excepción vinculante si no descarta los resultados de esos.
  • El dlr maneja el caso de llamar a un delegado devuelto por una función automáticamente, esto también le permitirá hacer lo mismo con un FSharpFunc
  • Agrega un! operador de prefijo para manejar la invocación directa de objetos dinámicos y funciones que no tienen el tipo en tiempo de ejecución.

    Es de código abierto, licencia de Apache, puede ver la implementación y los casos de ejemplo de prueba de unidad básica.


Como mencionó Eriawan, el ? el operador se comporta un poco como el tipo dynamic en C #. El artículo sobre llamar a SQL no depende de nada del DLR, ya que puede proporcionar su propia implementación del ? operador y el compilador lo usa directamente.

También escribí un breve ejemplo de cómo usar el ? operador para llamar a los miembros que usan DLR, que está disponible en F # snippets y hay una versión más sofisticada de Matthew Podwysocki . Otro fragmento muestra cómo usarlo para llamar a tipos .NET estándar usando Reflection .

Ver también: