【发布时间】:2015-01-23 04:15:32
【问题描述】:
我正在实现一个需要传递在运行时未知的特定委托类型的函数。我想返回一个以 ParamArray 作为其唯一参数的泛型方法(该方法将用于调用另一个方法,传递 ParamArray 作为其参数)。
使用“真实”委托时,以下代码可以正常工作:
Public Sub OnEvent(ParamArray params())
'Do work
End Sub
Function SomeFunc()
Return New RoutedEventHandler(AddressOf OnEvent)
End Function
即使 OnEvent 与 RoutedEventHandler 的参数不匹配,这仍然有效 - 编译器可以使用 ParamArray,并正确传递参数。
但是,当使用 CreateDelegate 时,运行时会抱怨参数不匹配:
Function SomeFunc()
Return [Delegate].CreateDelegate(GetType(RoutedEventHandler), Me, "OnEvent")
End Function
实际代码将在运行时获取委托类型,因此我需要使用 CreateDelegate。有什么办法吗?
【问题讨论】:
-
GetType(Object())可以工作吗? -
否,因为等待 Delegate 的 AddHandler 例程需要完全匹配
-
你最终想要做什么?这似乎是一种危险的编程方式。让我们进一步了解您的最终目标,也许我们可以帮助您找到比动态委托创建更好的解决方案。
-
@siride。我正在为 wpf 编写 MarkupExtension - 它设置在元素的事件“属性”上,并返回该事件的有效委托。它将绑定到数据模型上的给定方法签名。然而,中间的魔法直到运行时才知道委托类型。 [此外,我正在尝试将包罗万象的委托返回给元素,并将在内部将引发的事件传递给目标。这允许动态目标 - 如果数据模型中的对象发生更改,我不需要分离旧目标并附加新目标]