我的工作变得像熟悉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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top