C# 重写DynamicObject时';s TryInvokeMember(),如何选择要调用的正确重载?
当在C# 重写DynamicObject时';s TryInvokeMember(),如何选择要调用的正确重载?,c#,.net,dynamic-language-runtime,dynamicobject,tryinvokemember,C#,.net,Dynamic Language Runtime,Dynamicobject,Tryinvokemember,当在DynamicObject上重写以下方法时,您将如何实现算法来选择正确的方法重载 bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result) 如果此重载问题是由于转发到静态实现的方法造成的。一个解决方案可能是让dlr为您完成工作。开源有一个静态方法,创建所有dlr绑定代码,适当缓存,然后调用它,dlr绑定器执行重载解析。此示例在重载解析中处理命名/可选参数和推断泛型,但是DynamicO
DynamicObject
上重写以下方法时,您将如何实现算法来选择正确的方法重载
bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
如果此重载问题是由于转发到静态实现的方法造成的。一个解决方案可能是让dlr为您完成工作。开源有一个静态方法,创建所有dlr绑定代码,适当缓存,然后调用它,dlr绑定器执行重载解析。此示例在重载解析中处理命名/可选参数和推断泛型,但是DynamicObject在调用中不公开显式泛型或ref out参数。这并不简单,因为您必须考虑隐式类型转换和可变长度参数(必须映射到数组).
框架中的类提供了一个如何找到匹配方法的示例。这对我来说有点不清楚,但是如果调用的成员名称相同,
args
数组将具有不同的长度、不同的类型,或者两者都有。@vcsjones:仅这两个方面,或者更多?有一个bug处理了wayout/ref参数,并且它的修复程序没有进入SP1。我在猜测我自己,认为问题远不止于眼前。