我有这堂课:
Public Class Form1ViewModel
#Region "Classes collègues"
Public objInfoViewModel As InfoViewModel
Public objResultViewModel As ResultViewModel
#End Region
#Region "Constructor"
Public Sub New()
objInfoViewModel = New InfoViewModel
objResultViewModel = New ResultViewModel
Dim collegue As IMediatorForm1
AddHandler collegue.ChangeStatut, AddressOf OnChangingStatut
'AddHandler objInfoViewModel.ChangeStatut, AddressOf OnChangingStatut
End Sub
#End Region
#Region "Methods"
Private Sub OnChangingStatut(ByVal intAge As Integer)
If (objResultViewModel IsNot Nothing) Then
If (intAge > 0 AndAlso intAge < 10) Then objResultViewModel.Result = "Enfant"
If (intAge >= 10 AndAlso intAge < 30) Then objResultViewModel.Result = "Adolescent"
If (intAge >= 30 AndAlso intAge < 50) Then objResultViewModel.Result = "Homme"
If (intAge >= 50) Then objResultViewModel.Result = "Vieux"
End If
End Sub
#End Region
End Class
InfoViewModel
和ResultViewModel
是两个实现IMediatorForm1
接口的类。
当我尝试AddHandler objInfoViewModel.ChangeStatut, AddressOf OnChangingStatut
时没有问题。但是我想为每个实现IMediatorForm1
接口的类添加事件处理程序。
当我尝试
时Dim collegue As IMediatorForm1
AddHandler collegue.ChangeStatut, AddressOf OnChangingStatut
我得到Null Exception
因为对象collegue
什么都没有。所以
答案 0 :(得分:2)
Public Sub New()
objInfoViewModel = New InfoViewModel
objResultViewModel = New ResultViewModel
Dim collegue As IMediatorForm1
' you are note setting anything to the object reference above
AddHandler collegue.ChangeStatut, AddressOf OnChangingStatut
' cannot do the above because "collegue" is NOTHING.
'AddHandler objInfoViewModel.ChangeStatut, AddressOf OnChangingStatut
End Sub
请参阅我在上面的代码中添加的评论...
我可以提出一个解决方案,但它并不是100%清楚你想要做什么。
如果2个全局变量属于该接口类型,那么只需在AddHandler代码中直接使用它们。
或者,您可以遍历它们以添加每个...
for each obj as IMediatorForm1 in {objInfoViewModel, objResultViewModel }
AddHandler obj.ChangeStatut, AddressOf OnChangingStatut
next
<强> 修改 强>
如果你试图挂钩同一个对象你可以做的创建。 只需在构造函数中使用“ME”关键字。
AddHandler Me.ChangeStatut, AddressOf OnChangingStatut
答案 1 :(得分:1)
您的基础架构是否允许使用abstract class而不是IMediatorForm1
接口?在这种情况下,您可以在抽象基类中实现处理程序。