Различия между ExpandoObject, DynamicObject и dynamic

Каковы различия между System.Dynamic.ExpandoObject , System.Dynamic.DynamicObject и dynamic ?

В каких ситуациях вы используете эти типы?

162
задан Newbie 23 September 2011 в 16:57
поделиться

2 ответа

Ключевое слово dynamic используется для объявления переменных, которые должны быть привязаны позднее.
Если вы хотите использовать позднее связывание для любого реального или воображаемого типа, вы используете ключевое слово dynamic, а компилятор сделает все остальное.

Когда вы используете ключевое слово dynamic для взаимодействия с обычным экземпляром, DLR выполняет вызовы с поздней привязкой к обычным методам экземпляра.

Интерфейс IDynamicMetaObjectProvider позволяет классу управлять поведением позднего связывания.
Когда вы используете ключевое слово dynamic для взаимодействия с реализацией IDynamicMetaObjectProvider, DLR вызывает методы IDynamicMetaObjectProvider, и объект сам решает, что делать.

Классы ExpandoObject и DynamicObject являются реализациями IDynamicMetaObjectProvider.

ExpandoObject — это простой класс, который позволяет вам добавлять элементы в экземпляр и использовать их динамическивместе.
DynamicObject — это более продвинутая реализация, которую можно наследовать, чтобы легко обеспечить индивидуальное поведение.

141
ответ дан 23 November 2019 в 21:22
поделиться

Согласно спецификации языка C# dynamic является объявлением типа. т.е. dynamic x означает, что переменная x имеет тип dynamic.

DynamicObject — это тип, который упрощает реализацию IDynamicMetaObjectProvider и, таким образом, переопределяет конкретное поведение привязки для этого типа.

ExpandoObject — это тип, который действует как набор свойств. т.е. вы можете добавлять свойства, методы и т. д. к динамическим экземплярам этого типа во время выполнения.

35
ответ дан 23 November 2019 в 21:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: