LoginSignup
2
5

More than 3 years have passed since last update.

# C# Dispose 処理のテンプレ

Last updated at Posted at 2019-05-15

C# で RectiveProperty 利用時に大量の Dispose() 呼ばないといけないのでテンプレメモった ReactiveProperty のネット上のサンプルには必ずしもこのように書いてない事があるのでコピペ気味な人は注意にゃーん。

MvvM 的には Model が永続的かつそれを監視してビューに反映させる為に ReactiveProperty を利用したケースでは View から ViewModelDispose() を明示的に呼ばないと Model ViewModel 間の参照が消えずリーク的動作になると思われにゃーん。 (この理解であってる?)


using System;
using System.Reactive.Disposables

    public class Foo : IDisposable
    {
        private CompositeDisposable Disposable { get; } = new CompositeDisposable();

        ~Foo ()
        {
            Dispose(false);
        }

        public void Dispose()
        {
            Dispose(true);
            // GC.SuppressFinalize(this); if overrided "virtual void Dispose(bool disposing)"
        }

        protected virtual void Dispose(bool disposing)
        {
            if (disposing)
            {
                // managed?.Free();
                // managed = null;
                Disposable.Dispose();
            }
            // unmanaged?.Free();
            // unmanaged = null;
        }

        public Foo ()
        {
            // Disposable.Add(DisposableInstances);
            // rxprop = model.ToReactivePropertyAsSynchronized(m=>m.Value).AddTo(Disposable);
            // rxprop = model.ObserveProperty(m=>m.Value).ToReactiveProperty().AddTo(Disposable);
        }
    }

参考

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5