Подтвердить что ты не робот

С# 'dynamic' в F #

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

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

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

Спасибо.

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

Ответ 3

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

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

который используется на С#, например

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