タイトル : Re^3: Delgateの受け渡し? 投稿日 : 2009/03/14(Sat) 20:51 投稿者 : 魔界の仮面弁士
> > (2) SlideTimerClass 自身がタイマー処理を行いたい。 > それは違います。あくまでも利用者クラス内のTick処理SubにTickイベントを > 発生させるだけです。 う〜ん。そのことと、 Private EventProc As Predicate(Of EventHandler(Of EventArgsSlideTimer)) との関連性がわかりません。 Predicate(Of T) は、Booleanを返す「Function」であって、「Sub」では無いですよね。 Tick のためのデリゲートを渡したいなら、EventHandler 型になるはずですし。 Predicate(Of T) な Function 実装を、何のために使いたいのでしょうか? 呼び出すだけであれば、「Dim c As Boolean = Me.EventProc(obj)」だけであって、 クラス内で AddressOf を使う必要は無いはずですよ。 > > (4) 利用者側でデリゲートを用意し、それを SlideTimerClass に処理させたい。 > そうです。RemoveHandlerの発行箇所が複数あるので、それならばSlide_Tickアドレスを > SlideTimerClassに覚えさせて、 > NewまたはStartでAddHandler > FinalizeまたはStopでRemoveHandler > できないかなぁ、と考えた次第です。 ファイナライザを使うと、ガベージコレクトによる回収が遅れます。 使わないで済む実装があるなら、使わない選択肢も模索してみてください。 また、元のコードについていうと、必ずしも Timer を継承させる必要は無く、 ヘルパ クラスを作るだけで良いような気もします。また、継承させるのであれば、 元の Timer が持っている、IContainer を受け取るコンストラクタを用意すべきかと。 コンポーネントが IContainer を受け取る場合、親フォームが破棄される際に Dispose(True) によってタイマーも破棄されるようになりますが、今回の実装だと それは行われませんよね。 |