C # '' динамический 'в F # - PullRequest
       38

C # '' динамический 'в F #

18 голосов
/ 14 ноября 2011

Один пример использования DLR в C # выглядит следующим образом:

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

что будет эквивалентно в F #?

Спасибо.

Ответы [ 4 ]

23 голосов
/ 14 ноября 2011

Оператор ? обладает выразительной силой, аналогичной ключевому слову dynamic в C # (но его можно использовать только для чтения свойств, вызова метода и установки свойств).

Не существует встроенного-в реализации, которая позволила бы вам динамически использовать свойства или методы класса .NET (через Reflection или DLR), но есть некоторые довольно надежные реализации от сообщества.Это обсуждалось в еще одном вопросе SO до .

. Существуют также реализации ?, которые позволяют получить доступ к некоторым распространенным источникам данных, таким как базы данных SQL.Например, эта статья MSDN включает в себя определение, которое позволяет написать db?Query?Foo(1) для вызова хранимой процедуры с именем Foo.

Для различных других типов (таких как поиск элемента вXAML или доступа к элементам или атрибутам в документе XML), определение ? довольно просто написать.

9 голосов
/ 10 июня 2013

Существует пакет с именем FSharp.Interop.Dynamic, который позволит выполнить вызов динамического объекта с помощью оператора ?.

7 голосов
/ 14 ноября 2011

С другой стороны, если вы пытаетесь представить поведение dynamic для C # из F #, вы можете использовать DynamicAttribute [MSDN] . Например, объявление динамического свойства может выглядеть как

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

который используется из C # как

var hdp = new HasDynamicProperty();
dynamic dynObj = hdp.DynamicObject;
3 голосов
/ 14 ноября 2011

F # имеет?оператор, который вы используете следующим образом:

 myVariable?SomePropertyThatIsNotDeclared

Не существует динамического эквивалента ключевого слова.Взгляните на эту статью о том, как ее использовать https://weblogs.asp.net/podwysocki/using-and-abusing-the-f-dynamic-lookup-operator

...