ZX ASM 3.0
Это имело лучший пользовательский интерфейс и хороший набор функций по сравнению с другими ассемблерами в конце двадцатого века.
Небольшое примечание: для тех, кто не знает, динамический пакет методов - это техника динамического добавления методов к объекту. Билл Вагнер описывает ее здесь с исходным кодом здесь.
Простой ответ заключается в том, что концепция MethodBag просто показывает вам технику. Вы можете абсолютно точно использовать ExpandoObject для этого, но может наступить момент, когда вы захотите написать свой собственный класс, который наследуется от System.Dynamic.DynamicObject
. В качестве примера можно привести динамический объект JSON, YAML или XML, который позволяет ссылаться на данные в точечных свойствах-нотациях, а не традиционным строковым способом. Если вы наследуете от DynamicObject, вы можете обнаружить, что хотите разрешить добавление динамических функций в свой класс. Техника MethodBag показывает, как это сделать. ExpandoObject является лишь одним из примеров класса, реализующего эту технику. ExpandoObject будет хорош для 95% того, что вам нужно, а техника MethodBag покажет вам, как написать свой собственный, если вы решите сделать это для последних 5%.
MethodBags и аналогичные реализации имеют некоторые ограничения. Может быть проще реализовать собственный класс, если вы столкнетесь с этими препятствиями. В частности:
Трудно реализовать состояние в пакете методов. (Деревья выражений не могут содержать объекты, статически типизированные как динамический
; нет хорошего синтаксиса для создания методов, которые полагаются на внутреннее состояние одного и того же динамического объекта.)
Можно только добавлять общедоступные методы. Никаких виртуальных, частных, защищенных или абстрактных методов.
Невозможно реализовать интерфейс.
Для сравнения, ExpandoObjects
являются настоящими классами и намного богаче и полнее. Они более точно имитируют то, что вы иначе получили бы бесплатно, скажем, в Ruby или Python.