C#'s 'dynamic' in F#

心已入冬 提交于 2019-12-18 12:57:09

问题


One example of using the DLR in C# is as follows:

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

what would be the equivalent in F#?

Thanks.


回答1:


The ? operator has similar expressive power to the dynamic keyword in C# (but it can be only used for reading of properties, method invocation and setting of properties).

There is no built-in implementation that would allow you to dynamically use properties or methods of a .NET class (via Reflection or DLR), but there are some fairly solid implementations from the community. This has been discussed in another SO question before.

There are also implementations of ? that allow you access some common data sources such as SQL databases. For example, this MSDN article includes a definition that allows you to write db?Query?Foo(1) to call a stored procedure named Foo.

For various other types (such as finding an element in XAML or accessing elements or attributes in XML document), the definition of ? is quite easy to write.




回答2:


There's a package called FSharp.Interop.Dynamic and that will make it possible to do a call to a dynamic object using the ? operator.




回答3:


On the flip side, if you're trying to expose dynamic behavior to C# from F#, you can use DynamicAttribute[MSDN]. For example, declaring a dynamic property might look like

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

which is used from C# like

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



回答4:


F# has the ? operator which you use like so:

 myVariable?SomePropertyThatIsNotDeclared

There is no dynamic keyword equivalent. Take a look at this article for how to use it https://weblogs.asp.net/podwysocki/using-and-abusing-the-f-dynamic-lookup-operator



来源:https://stackoverflow.com/questions/8123209/cs-dynamic-in-f

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!