Я работаю над разработкой приложения, которое взаимодействует с семейством USB-датчиков. Я создал базовую реализацию, которая использует класс Sensor. Класс содержит события и методы, которые позволяют взаимодействовать с датчиком (также задействован многопоточный процессор задач, но я остановлюсь на простом примере).
Моя проблема в том, что этот простой пример доказательства концепции работает нормально, но теперь мне нужно расширить приложение для поддержки всего семейства датчиков. Для этого я создал класс BaseSensor со всеми соответствующими методами и событиями, а затем создал несколько подклассов, таких как SensorA, SensorB и SensorC, которым присущ BaseSensor.
Это выглядело как хорошее применение полиморфизма, поэтому я создал в BaseSensor функцию Shared, которая называется 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
Я что-то здесь упускаю. Как мне поступить?