可以为AddHandler和RaiseEvent添加不同的签名

时间:2015-11-19 22:36:51

标签: vb.net events

我的应用程序有一个事件,我需要在调用处理程序之前计算一些结果,然后将此结果传递给处理程序。我正在做这样的事情:

Dim handlers As List(Of Action(Of String, Decimal))

Public Custom Event MyEvent As Action(Of String, Decimal)
    AddHandler(value As Action(Of String, Decimal))
        If value IsNot Nothing Then handlers.Add(value)
    End AddHandler
    RemoveHandler(value As Action(Of String, Decimal))
        handlers.Remove(value)
    End RemoveHandler
    RaiseEvent(input As String, result As Decimal)
        'perform some calculation here before calling the event handlers
        result = GetCalculationResult(input)
        For Each handler In handlers
            handler.Invoke(input, result)
        Next
    End RaiseEvent
End Event

这意味着在引发事件时我必须传入一个在RaisEvent块中被覆盖的虚拟值:

RaiseEvent obj.MyEvent("Input here", 0)

我无法更改RaiseEvent块中的签名,只能使用Input参数:

  

错误BC31137
  '的RaiseEvent'方法必须与包含事件的委托类型具有相同的签名' Action(Of String,Decimal)'。

有没有办法使用与处理程序不同的签名来启动事件?

0 个答案:

没有答案