您可能只想让inputObject
具有所有这些成员的类型。例如,如果您使用的WinForms,这将是控制:
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
委托类型仍必须匹配,虽然。不过,这对我来说有点笨拙。如果可能,请尝试根据需要为addHandlers
创建不同的重载,并使用基本类型以避免创建其中的许多重载。如果拥有可作为inputOjbect
传入的类型的代码,请使用接口。
我想到这一点,但他们并不都有着一种遗传型。 – SeriousSamP 2011-12-19 18:31:51
@SeriousSamP我添加了一些额外的细节。 – vcsjones 2011-12-19 18:51:48
我在反射方法上使用变体,谢谢。 – SeriousSamP 2011-12-19 20:21:06