VB.NET WithEventsキーワードの動作-VB.NETコンパイラーの制限?
-
20-08-2019 - |
質問
私は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
所属していません StackOverflow