重载VB.NET事件?
在我的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 它显然允
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
来确定发生了什么,所以没有节省多少。如果不明显,我添加了一个,并附加了感叹号,以说明如何将对象转换回原始变量类型并使用该变量。下一步我将使用一个对象类型的子对象,但我不确定是否有更好的方法。谢谢你的回答!