VB.NET WithEvents关键字行为 – VB.NET编译器限制?

我正在努力变得像熟悉C#一样熟悉VB.NET(我工作场所使用的语言)。 关于学习过程的最好的事情之一是,通过了解另一种语言,您倾向于更多地了解您的主要语言 – 这样的小问题会弹出:

根据我发现的消息来源和过去的经验,VB.NET中声明为WithEvents的字段能够引发事件。 我知道C#没有直接的等价物 – 但我的问题是:VB.NET中没有这个关键字的字段不能引发事件,有没有办法在C#中创建相同的行为? VB编译器是否只是阻止这些对象处理事件(实际上允许它们像往常一样引发事件)?

我只是好奇; 我对这个问题没有任何特别的申请……

省略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