質問

私はVB.NET(職場で使用されている言語)と同じくらいC#に精通することに取り組んでいます。学習プロセスの最も良い点の1つは、他の言語について学習することで、主言語についてより多くのことを学ぶ傾向があることです。次のような小さな質問がポップアップ表示されます。

私が見つけた情報源と過去の経験によると、VB.NETのフィールドは WithEvents として宣言されており、イベントを発生させることができます。私はC#には直接同等のものがないことを理解していますが、私の質問は次のとおりです:fields without 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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top