tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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) によってタイマーも破棄されるようになりますが、今回の実装だと
それは行われませんよね。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。