您可能只想讓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