我正在努力熟悉C#,就像我使用VB.NET(我工作场所使用的语言)一样。关于学习过程最好的事情之一就是通过了解另一种语言,你倾向于更多地了解你的主要语言 - 这样的问题很少出现:
根据我发现的消息来源和过去的经验,VB.NET中声明为 WithEvents 的字段能够引发事件。我知道C#没有直接的等价物 - 但我的问题是:字段没有 VB.NET中的这个关键字无法引发事件,有没有办法在C#中创建相同的行为? VB编译器是否只是阻止这些对象处理事件(实际上允许它们像往常一样引发事件)?
我只是好奇;我对这个问题没有任何特别的申请......
答案 0 :(得分:20)
省略WithEvents不会阻止成员引发事件。它只是阻止你在事件中使用'handles'关键字。
以下是WithEvents的典型用法:
Class C1
Public WithEvents ev As New EventThrower()
Public Sub catcher() Handles ev.event
Debug.print("Event")
End Sub
End Class
这是一个不使用WithEvents的类,大致相当于。它说明了为什么WithEvents非常有用:
Class C2
Private _ev As EventThrower
Public Property ev() As EventThrower
Get
Return _ev
End Get
Set(ByVal value As EventThrower)
If _ev IsNot Nothing Then
removehandler _ev.event, addressof catcher
End If
_ev = value
If _ev IsNot Nothing Then
addhandler _ev.event, addressof catcher
End If
End Set
End Property
Public Sub New()
ev = New EventThrower()
End Sub
Public Sub catcher()
Debug.print("Event")
End Sub
End Class