Один пример использования DLR в С# выглядит следующим образом:
dynamic dyn = new MyObject();
dyn.MyMethod(); //resolved at runtime
что было бы эквивалентно в F #?
Спасибо.
Один пример использования DLR в С# выглядит следующим образом:
dynamic dyn = new MyObject();
dyn.MyMethod(); //resolved at runtime
что было бы эквивалентно в F #?
Спасибо.
Оператор ?
имеет аналогичную выразительную силу ключевому слову dynamic
в С# (но он может использоваться только для чтения свойств, вызова метода и установки свойств).
Нет встроенной реализации, позволяющей динамически использовать свойства или методы класса .NET(через Reflection или DLR), но есть некоторые довольно прочные реализации из сообщества. Это обсуждалось в другом вопросе SO до.
Существуют также реализации ?
, которые позволяют вам обращаться к некоторым распространенным источникам данных, таким как базы данных SQL. Например, эта статья MSDN содержит определение, которое позволяет вам писать db?Query?Foo(1)
для вызова хранимой процедуры с именем Foo
.
Для других типов (например, поиск элемента в XAML или доступ к элементам или атрибутам в документе XML) определение ?
довольно легко писать.
Там пакет под названием FSharp.Interop.Dynamic
, который позволит выполнить вызов динамического объекта с помощью оператора ?
.
С другой стороны, если вы пытаетесь выявить поведение dynamic
для С# из F #, вы можете использовать DynamicAttribute
[MSDN ]. Например, объявление динамического свойства может выглядеть как
type HasDynamicProperty() =
[<Dynamic([|true|])>]
member this.DynamicObject : obj = ...
который используется на С#, например
var hdp = new HasDynamicProperty();
dynamic dynObj = hdp.DynamicObject;
F # имеет? оператор, который вы используете так:
myVariable?SomePropertyThatIsNotDeclared
Нет динамического эквивалента ключевого слова. Взгляните на эту статью о том, как ее использовать https://weblogs.asp.net/podwysocki/using-and-abusing-the-f-dynamic-lookup-operator