我正在尝试创建一个Sub,它可以获取一个对象并为其添加一堆事件处理程序,但该对象可以是所有具有这些事件的N种类型中的任何一种.我怎样才能做到这一点?如果我只是将它作为一个
可以这样做吗?
Sub addHandlers(ByVal inputObject as object) AddHandler inputObject.MouseDown, AddressOf HandleClick AddHandler inputObject.MouseUp, AddressOf HandleMouseUp End Sub
编辑:这些对象中的每一个都是一个类的实例,它继承了已经拥有这些事件的不同类(通常是一个控件).
谢谢你的帮助,
山姆.
Sub addHandlers(ByVal inputObject As Control) AddHandler inputObject.MouseDown, AddressOf HandleClick AddHandler inputObject.MouseUp, AddressOf HandleMouseUp End Sub
或者如果是WPF,请使用UIElement:
Sub addHandlers(ByVal inputObject As UIElement) AddHandler inputObject.MouseDown, AddressOf HandleClick AddHandler inputObject.MouseUp, AddressOf HandleMouseUp End Sub
现在,任何该类型的控件都可以传递给addHandlers.
编辑:
如果所有这些之间没有共同类型,则可以使用反射:
Sub addHandlers(ByVal inputObject As Object) Dim type = inputObject.GetType() Dim handleClickDel = New MouseEventHandler(AddressOf HandleClick) Dim handleUpDel = New MouseEventHandler(AddressOf HandleMouseUp) type.GetEvent("MouseDown").AddEventHandler(inputObject, handleClickDel) type.GetEvent("MouseUp").AddEventHandler(inputObject, handleUpDel) End Sub
但是委托类型仍然必须匹配.不过,这对我来说有点笨拙.如果可能,尝试根据需要为addHandler创建不同的重载,并使用基类型来避免创建其中的许多重载.如果拥有可以作为inputOjbect传入的类型的代码,请使用接口.