如何在VB.Net中将特定Handler附加至未知类型实例?
- 内容介绍
- 文章标签
- 相关推荐
本文共计492个文字,预计阅读时间需要2分钟。
我正在尝试创建一个Sub,它可以获取一个对象并为它添加一个事件处理程序。但这个对象可以是具有这些事件中任何一种类型的N种类型的任意一种。我该如何做到这一点?如果我只是将它作为一个对象使用,怎么办?
我正在尝试创建一个Sub,它可以获取一个对象并为其添加一堆事件处理程序,但该对象可以是所有具有这些事件的N种类型中的任何一种.我怎样才能做到这一点?如果我只是将它作为一个Object,如下所示,AddHandler会抱怨Object不存在该事件.可以这样做吗?
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传入的类型的代码,请使用接口.
本文共计492个文字,预计阅读时间需要2分钟。
我正在尝试创建一个Sub,它可以获取一个对象并为它添加一个事件处理程序。但这个对象可以是具有这些事件中任何一种类型的N种类型的任意一种。我该如何做到这一点?如果我只是将它作为一个对象使用,怎么办?
我正在尝试创建一个Sub,它可以获取一个对象并为其添加一堆事件处理程序,但该对象可以是所有具有这些事件的N种类型中的任何一种.我怎样才能做到这一点?如果我只是将它作为一个Object,如下所示,AddHandler会抱怨Object不存在该事件.可以这样做吗?
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传入的类型的代码,请使用接口.

