VB.NET WithEvents关键字的行为 - VB.NET编译器的限制?
-
20-08-2019 - |
题
我的工作变得像熟悉C#,因为我用VB.NET(我的工作场所所使用的语言)。一个关于学习过程的最好的事情是,通过学习其他语言,你往往会更多地了解您的主要语言 - 像这样的小问题弹出:
据我已经找到了来源,和以往的经验,在VB.NET的字段被声明为的 WITHEVENTS 的能够引发事件的。据我所知,C#不具有直接等效 - 但我的问题是:场的不的这个关键字在VB.NET不能引发事件,有没有一种方法来创建在C#中此相同的行为呢?是否VB编译器简单地从具有它们的事件处理阻断这些对象(而实际上允许它们引发事件照常)?
我只是好奇;我没有对这个问题的任何特定应用...
解决方案
省略WITHEVENTS不从引发事件块成员。它只是阻止你使用他们的事件“把手”关键字。
下面是一个典型的使用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
不隶属于 StackOverflow