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() ;;