Когда я хочу динамически вызывать статически определенный ( "статически" в смысле "определенный во время компиляции", а не в смысле метода "класс-член" ) для любого объекта в С#, я могу используйте отражение, чтобы получить дескриптор этого метода и вызвать его:
typeof(Foo).GetMethod("Bar").Invoke(foo, new object[] { /* params */ });
Однако объекты, сделанные динамическими, наследуя от DynamicObject
, реагируют на вызовы метода экземпляра (undefined) с использованием TryInvokeMember
, а динамические методы, на которые отвечает класс, не могут быть обнаружены посредством отражения по очевидным причинам. Это означает, что я не могу получить дескриптор метода для метода, на который должен отвечать TryInvokeMember
.
Как ни странно, мне кажется, что вы не можете динамически вызывать динамический метод для объекта dynamic
так же легко, как вы можете вызвать определенный метод для объекта dynamic
.
Я рассмотрел вызов TryInvokeMember
напрямую, но первым аргументом должен быть экземпляр InvokeMemberBinder
, абстрактного класса. Я чувствую, что если мне нужно реализовать класс для вызова динамического метода для динамического объекта, я должен делать что-то неправильно.
Как я могу вызвать метод в объекте dynamic
по его имени, зная, что целевой класс не реализует его и что он должен отвечать на использование TryInvokeMember
?