我正在开发一个可以与USB传感器家族对话的应用程序。我已经创建了一个基本的实现,它利用了一个名为Sensor的类。该类包含允许与传感器交互的事件和方法(还涉及一个线程任务处理器,但我将使用一个简单的示例)。
我的问题是,这个简单的概念证明示例工作得很好,但现在我需要扩展应用程序以支持整个传感器系列。为此,我创建了一个包含所有适当方法和事件的BaseSensor类,然后创建了多个子类,如SensorA、SensorB和SensorC,它们都是BaseSensor固有的。
这似乎是一个很好的多态性应用程序,所以我在BaseSensor上创建了一个名为Initialize的共享函数,该函数执行初始USB通信,并根据传感器类型(SensorA、SensorB、SensorC)返回正确的对象。这工作得很好,但是我似乎找不到一种方法来正确地声明带有事件的对象。请参阅我的deliema的示例代码。
尝试1:
Public Class Form1
Dim WithEvents oBaseClass As BaseClass
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
oBaseClass = New ExtendedClass
oBaseClass.Test() 'This doesn't work because the object was type casted.
End Sub
Private Sub TestEventHdlr() Handles oBaseClass.TestEvent
MsgBox("Event Fired")
End Sub
End Class
Public Class BaseClass
Public Event TestEvent()
End Class
Public Class ExtendedClass
Inherits BaseClass
Public Sub Test()
MsgBox("Test")
End Sub
End Class尝试2:
Public Class Form1
Dim WithEvents oBaseClass 'This doesn't work.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
oBaseClass = New ExtendedClass
oBaseClass.Test()
End Sub
Private Sub TestEventHdlr() Handles oBaseClass.TestEvent
MsgBox("Event Fired")
End Sub
End Class
Public Class BaseClass
Public Event TestEvent()
End Class
Public Class ExtendedClass
Inherits BaseClass
Public Sub Test()
MsgBox("Test")
End Sub
End Class我遗漏了一些东西。我应该如何继续?
发布于 2009-09-01 20:22:16
略微调整了事件,如果你想要一个这样的例子,也稍微改变了事件,提供了一点不同的方法。
Public Class Form1
Dim oBaseClass As BaseClass 'Early bound'
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
oBaseClass = New ExtendedClass
If TypeOf oBaseClass Is BaseClass Then
AddHandler DirectCast(oBaseClass, BaseClass).TestEvent, AddressOf TestEventHdlr
End If
oBaseClass.Test()
End Sub
Private Sub TestEventHdlr()
MsgBox("Event Fired")
End Sub
End Class
Public Class BaseClass
Public Event TestEvent()
Public Overridable Sub Test()
RaiseEvent TestEvent()
End Sub
End Class
Public Class ExtendedClass
Inherits BaseClass
Public Overrides Sub Test()
MyBase.Test()
MsgBox("Test")
End Sub
End Classhttps://stackoverflow.com/questions/1354032
复制相似问题