(hatena (diary ’Nobuhisa)) このページをアンテナに追加 RSSフィード Twitter

15/01/09 : Be strong

[]F#とIDisposable

F#におけるIDisposableの実装方法って、なんだか情報が少ないような気がします。

洋書や海外のサイトなどでは見かけますけどね。日本人F#erはシャイなので仕方ないです。(?


ということで、載せてしまおう。

以下のような感じで大丈夫だと思います。多分。

C#の実装とは所々異なりますので、その点はご注意ください。

cleanupManagedResources 関数と

cleanupUnmanagedResources 関数をカスタマイズしてお使いください。


type FSharpClass() =
    (* ... *)

    member val private Disposed = false with get, set

    member private this.Cleanup(disposing) =
        let cleanupManagedResources () =
            ((* マネージド・リソースの後処理を書く *))
        let cleanupUnmanagedResources () =
            ((* アンマネージド・リソースの後処理を書く *))

        if not this.Disposed then
            this.Disposed <- true
            if disposing then
                cleanupManagedResources ()
            cleanupUnmanagedResources ()
            //base.Dispose(disposing) // 親クラスのDisposeを呼び出す場合

    interface IDisposable with
        override this.Dispose() =
            this.Cleanup(true)
            GC.SuppressFinalize(this)

    override this.Finalize() = this.Cleanup(false)


本日のまとめ

> 社畜.Dispose() ;;

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/Nobuhisa/20150109/p1