重载VB.NET事件?

重载VB.NET事件?,vb.net,class,Vb.net,Class,在我的VB.NET类中,我有如下代码: Public Class barClass Private Function foo(data as string) msgbox("Data is a string: " & data) End Function Private Function foo(data as integer) msgbox("Data is an integer: " & data End Function End Class 它显然允

在我的VB.NET类中,我有如下代码:

Public Class barClass

Private Function foo(data as string)
    msgbox("Data is a string: " & data)
End Function

Private Function foo(data as integer)
    msgbox("Data is an integer: " & data
End Function

End Class
它显然允许您传递
foo
字符串或整数

我想我也可以为活动做同样的事情,所以我尝试:

Public Event FooRaised(data as string)
Public Event FooRaised(data as integer)
我假设这会让我通过传递从
foo
获得的任何数据来引发事件,但我得到一个错误,说我不能这样做(FooRaised已经声明)


如何实现这一点?

使用对象参数声明单个事件,然后检查类型以处理它:

Public Class Form1

  Public Event Foo(o As Object)

  Sub FooHandler(o As Object) Handles Me.Foo
    If o.GetType Is GetType(Integer) Then
      Dim i As Integer = DirectCast(o, Integer)
      i += 1 'add one to the integer value'
      MsgBox(i.ToString)
    ElseIf o.GetType Is GetType(String) Then
      Dim s As String = DirectCast(o, String)
      s &= "!!" 'append exclamation marks'
      MsgBox(s)
    End If
  End Sub

  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    RaiseEvent Foo(21)
    RaiseEvent Foo("a string value")
  End Sub
End Class

这样一个事件的处理程序是如何工作的?你不能重载事件——就这么简单。事件有一个特定的声明,你不能随意地发明新的声明。事件的可能重复通常被设计成对正在发生的事情不那么模棱两可。最后,由于某个地方必须使用
If
来确定发生了什么,所以没有节省多少。如果不明显,我添加了一个,并附加了感叹号,以说明如何将对象转换回原始变量类型并使用该变量。下一步我将使用一个对象类型的子对象,但我不确定是否有更好的方法。谢谢你的回答!