当重写DynamicObject的TryInvokeMember()时,如何选择正确的重载来调用?

时间:2011-05-01 02:52:45

标签: c# .net dynamic-language-runtime dynamicobject tryinvokemember

DynamicObject上覆盖以下方法时,如何实现算法来选择正确的方法重载?

bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)

2 个答案:

答案 0 :(得分:2)

如果此过载问题是由于转发到静态实现的方法。解决方案可能是让dlr为您完成工作。开源Dynamitey有一个静态方法,可以创建所有dlr绑定代码,适当地缓存然后调用它,dlr绑定器会重载解析。 example。此示例在重载决策中处理命名/可选参数和推断的泛型,但DynamicObject不会在调用中公开explict泛型或ref out params。

答案 1 :(得分:1)

这不是直截了当的,因为您必须考虑隐式类型转换和可变长度参数(必须映射到数组)之类的内容。

MethodCallResolver框架中的Zentrum类提供了如何查找匹配方法的示例。