当我想在 C# 中的任何对象上动态调用静态定义的(“在编译时确定”而不是“类级成员”的意义上的“静态”)方法时,我可以使用反射来获取该方法的句柄并调用它:
typeof(Foo).GetMethod("Bar").Invoke(foo, new object[] { /* params */ });
DynamicObject
但是,通过从响应(未定义的)实例方法调用继承而使对象动态化TryInvokeMember
,并且由于显而易见的原因,类响应的动态方法不会通过反射暴露。这意味着我无法获得应该由 . 响应的方法的方法句柄TryInvokeMember
。
具有讽刺意味的是,在我看来,您不能dynamic
像在非对象上调用已定义方法那样容易地动态调用对象上的动态方法dynamic
。
我考虑过TryInvokeMember
直接调用,但第一个参数必须是InvokeMemberBinder
一个抽象类的实例。我觉得如果我必须实现一个类来调用动态对象上的动态方法,我一定是做错了什么。
我如何dynamic
通过名称调用对象上的方法,知道目标类没有实现它并且应该使用它来响应它TryInvokeMember
?