2016-12-09 15 views
4

私はそれが何の内部状態を持っていないので、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や他の構文のバリエーションを使用して可能ですか?

+1

MMDates.DPをDataPlugインスタンスに設定していますか? CalculateDatesが呼び出されたのと同じインスタンスですか? – Darryl

+0

'Friend WithEvents DP With DataPlug' - > '... New DataPlug'として共有されました。それ以外の場合は共有または共有しない - 同じように動作します –

+0

これは明らかに[あなたの前の質問](http://stackoverflow.com/q/41049863/1070452)に関連しています。最後のQこれは 'List(Of Integer、Stringの))')でした。そうすれば、いつでも利用可能になり、次回の作業時に各プロジェクトに追加されます。 – Plutonix

答えて

0

これを行う適切な方法は、Partialで、下のレベルに焼き付けてからミックスインでのみ書き込むことです。だから、私の場合は、基本クラスでCalculateの部分を作り、Calcで実装し、プレスト!

関連する問題