Чтобы это работало, вам нужно определить ваше событие так, чтобы параметр передавался как тип Object, а затем выполнить операцию приведения в обработчике события.
ИЛИ вы можете определить интерфейс, общий для C1 и C2, и использовать его в качестве параметра.Затем вы можете использовать ссылку «как есть», если методы, определенные в интерфейсе, подходят, или вы снова окажетесь в операции приведения.
Обратите внимание, что если вы определяете интерфейс с помощью общих методов, и если эти общие методы - это все, что требуется для использования обработчиком событий, то вам не нужно выполнять какое-либо определение "TypeOf" вДля обработки события.
Все это говорит о том, что я знаю, что лучше, если это возможно, следовать везде, где это возможно, стандарту подписи событий, установленному в .NET:класс (или классы), который наследуется от System.EventArgs, а затем определяет настраиваемое свойство для доступа к вашему настраиваемому параметру.Таким образом, вы все равно можете передать ссылку на объект клиента в параметре Sender
, а затем получить доступ к своему пользовательскому параметру следующим образом:
Public Class MyCustomEventArgs
Inherits System.EventArgs
Private _MyCustomInterface As ICustomInterface
Public Property Myproperty As ICustomInterface
Get As ICustomInterface
Return _MyCustomInterface
End Get
Let(ByVal value As ICustomInterface)
_MyCustomInterface = value
End Let
End Property
End Class
Public Sub HandleMyEvent(ByVal Sender As Object, byVal e As MyCustomEventArgs) Handles MyEvent
Dim MyCustom Interface As ICustomInterface
MyCustominterface = e.TheCustominterface
MyCustominterface.DoSomething
End Sub