スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

F#入門初級編 第19回 Delegates と Events(7) Event

さて、ここまではEvent<'Del,'Args>,IEvent<>,IEvent<,>,IObservable<>型について紹介してきましたが、今回はEvent<'T>型についてふれておきます。
 
Event<'T>のシグネチャーは次のようになります。
type Event<'T> =
 class
  new Event : unit -> Event<'T>
  member this.Trigger : 'T -> unit
  member this.Publish :  IEvent<'T>
 end
 
ということでEvent<'Del,'Args>との違いはPublishされるのが、IEvent<,>型ではなくIEvent<>型であることです。
 
一つ例を挙げてみます。
 
type WhatTimeDidItHappenEventArgs (dateTime : System.DateTime) =
    inherit System.EventArgs()
    member this.DateTime = dateTime
 
type PublisherExampWithDelg () =
    let _event1 = 
        new Event<WhatTimeDidItHappenEventArgs>()
    member this.SomethingHappen() =
        _event1.Trigger(new WhatTimeDidItHappenEventArgs( System.DateTime.Now ))
    member this.Event1 = _event1.Publish
 
let t = new PublisherExampWithDelg();;
let originalEvent = t.Event1
 
以前までの例にくらべるとdelegateの定義が不要になりTriggerの引数がタプルでなくなっています。
 
publishされるのはIEvent型の値ですから、Handlerクラスのインスタンスを登録するか、もしくはIEventはIObservableであることを利用してObservable.addを用いて関数を登録します。
 
まずはHandlerクラスのインスタンスを登録してみます。
> let myHandler =
    new Handler<WhatTimeDidItHappenEventArgs>(
           fun sender args -> printfn "%A event fired(by Handler)" args.DateTime
     ) ;;
 
val myHandler : Handler<WhatTimeDidItHappenEventArgs>
 
> originalEvent.AddHandler(myHandler);;
val it : unit = ()
 
つぎはObservable.addを利用して登録してみます。
> Observable.add (fun( args:WhatTimeDidItHappenEventArgs) -> 
                        printfn "%A triggered (by IObservable.add)" args.DateTime)  originalEvent;;
val it : unit = ()
 
(なお上はoriginalEvent.Add(fun( args:WhatTimeDidItHappenEventArgs) -> 
                        printfn "%A triggered (by IObservable.add)" args.DateTime)とも書くことができます。)
 
トリガーを引いてみます。
 
> t.SomethingHappen();;
2010/04/11 19:43:33 event fired(by Handler)
2010/04/11 19:43:33 triggered (by IObservable.add)
val it : unit = ()
 
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

T GYOUTEN

Author:T GYOUTEN
F#と英単語とフリーソフトと読書に興味があります。
ホームページでフリーソフトも公開しています。どぞ御贔屓に。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
フリーエリア
フリーエリア
blogram投票ボタン
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。