F#中的C#'动态'

ay.*_*llo 18 f# dynamic-language-runtime dynamic

在C#中使用DLR的一个例子如下:

dynamic dyn = new MyObject();
dyn.MyMethod(); //resolved at runtime
Run Code Online (Sandbox Code Playgroud)

什么是F#中的等价物?

谢谢.

Tom*_*cek 23

?操作者具有相似的表达能力的dynamic在C#关键字(但它只能用于属性,方法调用和属性的设定的读出).

没有内置的实现允许您动态使用.NET类的属性或方法(通过Reflection或DLR),但社区中有一些相当可靠的实现.之前另一个SO问题中已经讨论过这个问题.

还有一些实现?允许您访问一些常见的数据源,如SQL数据库.例如,此MSDN文章包含一个允许您编写db?Query?Foo(1)以调用名为的存储过程的定义Foo.

对于其他各种类型(例如在XAML中查找元素或访问XML文档中的元素或属性),定义?很容易编写.


alb*_*jan 9

有一个被调用的包FSharp.Interop.Dynamic,可以使用?运算符调用动态对象.


Dan*_*iel 7

另一方面,如果您尝试将dynamic行为从F#暴露给C#,则可以使用DynamicAttribute[MSDN].例如,声明动态属性可能看起来像

type HasDynamicProperty() =
    [<Dynamic([|true|])>]
    member this.DynamicObject : obj = ...
Run Code Online (Sandbox Code Playgroud)

这是从C#中使用的

var hdp = new HasDynamicProperty();
dynamic dynObj = hdp.DynamicObject;
Run Code Online (Sandbox Code Playgroud)