Вопрос

Чтобы реализовать семантику «отсутствия метода» и тому подобное в C# 4.0, вам необходимо реализовать IDynamicObject:

public interface IDynamicObject
{
  MetaObject GetMetaObject(Expression parameter);
}

Насколько я понимаю, IDynamicObject на самом деле является частью DLR, поэтому он не нов.Но мне не удалось найти много документации по этому поводу.

Есть несколько очень простых примеров реализации (f.x. здесь и здесь), но может ли кто-нибудь указать мне на более полные реализации или настоящую документацию?

В частности, как именно вы должны обрабатывать параметр «параметр»?

Это было полезно?

Решение

Короткий ответ: MetaObject отвечает за фактическое создание кода, который будет выполняться на сайте вызовов. Механизм, который он использует для этого, - это деревья выражений LINQ, которые были улучшены в DLR. Таким образом, вместо того, чтобы начинать с объекта, он начинается с выражения, представляющего объект, и в конечном итоге ему нужно будет вернуть дерево выражений, которое описывает действие, которое необходимо выполнить.

При игре с этим, пожалуйста, помните, что версия System.Core в CTP была взята из снимка в конце августа. Он не очень точно соответствует какой-либо конкретной бета-версии IronPython. С тех пор в DLR был внесен ряд изменений.

Кроме того, для совместимости с CLR v2 System.Core выпуски IronPython, начиная с бета-версии 4 или бета-версии 5, теперь переименовывают все, что находится в пространстве имен System, в пространство имен Microsoft.

Другие советы

Если вы хотите, чтобы пример из конца в конец, включая исходный код, приводил к динамическому объекту, который хранит значение для произвольных свойств в Словаре, тогда мой пост & a first посмотрите, что Duck Typing в C # 4.0 " может быть правильным для вас. Я написал этот пост, чтобы показать, как динамический объект может быть приведен к статически типизированным интерфейсам. Он имеет полную рабочую реализацию Duck, которая является IDynamicObject и может действовать как IQuack.

Если вам нужна дополнительная информация, свяжитесь со мной в моем блоге, и я помогу вам, насколько смогу.

Я только что написал в блоге о том, как сделать это здесь:

http://mikehadlow.blogspot.com /2008/10/dynamic-dispatch-in-c-40.html

Вот что я понял до сих пор:

Динамическая языковая среда выполнения в настоящее время поддерживается как часть проекта IronPython . Так что это лучшее место для получения информации.

Кажется, что самый простой способ реализовать класс, поддерживающий IDynamicObject, - это получить из Microsoft.Scripting.Actions.Dynamic и переопределите соответствующие методы, например, Call-метод для реализации семантики вызова функций. Похоже, Microsoft.Scripting.Actions.Dynamic не был включен в CTP, но тот из IronPython 2.0 выглядит так, как будто он будет работать.

Мне все еще неясно, что конкретно означает параметр -параметр, но, похоже, он предоставляет контекст для привязки динамического объекта.

В этой презентации также содержится много информации о DLR:

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top