私はそれが何の内部状態を持っていないので、がShared
として実装するするメソッドがあります。今、私はその方法がRaiseEvent
経由で呼び出すことができるようにしたいと思いますので、私がやった共有サブイベントでのイベントの使用
Friend Class MMDates
Friend Shared Sub Calculate(ByRef CP As DataPlug)
MsgBox("dates was called with " & CP.Name)
End Sub
End Class
を:
呼び出し側でFriend Class MMDates
Friend Shared WithEvents DP As DataPlug
Friend Shared Sub Calculate(ByRef CP As DataPlug) Handles DP.CalculateDates
MsgBox("dates was called with " & CP.Name)
End Sub
End Class
、DataPlug
、私が追加:
Public Event CalculateDates(ByRef CP As DataPlug)
Friend Sub Calculate()
RaiseEvent CalculateDates(Me)
End Sub
これはすべてうまくコンパイルされ、Raise
はエラーなしで呼び出されますが、イベントはMMDates
に決して捕捉されません。
Public Shared Sub StartListening()
AddHandler DataPlug.CalculateDates, AddressOf Calculate
End Sub
を...そして私のアプリの起動ルーチン中にそれを呼び出す:私はMMDates
にこれを追加することで、代替を実施しました。これは技術的に私が望むものです。イベントは実際に共有メソッドを呼び出すことになります。ただし、コンパイル時に実際に定義されていても、このリンクは実行時に作成されます。
このShared
のイベントパターンは、VB.netでコンパイル時にHandles
や他の構文のバリエーションを使用して可能ですか?
MMDates.DPをDataPlugインスタンスに設定していますか? CalculateDatesが呼び出されたのと同じインスタンスですか? – Darryl
'Friend WithEvents DP With DataPlug' - > '... New DataPlug'として共有されました。それ以外の場合は共有または共有しない - 同じように動作します –
これは明らかに[あなたの前の質問](http://stackoverflow.com/q/41049863/1070452)に関連しています。最後のQこれは 'List(Of Integer、Stringの))')でした。そうすれば、いつでも利用可能になり、次回の作業時に各プロジェクトに追加されます。 – Plutonix