LoginSignup
0
0

More than 1 year has passed since last update.

IDisposable --メモ--

Last updated at Posted at 2021-07-27

Dispose パターン

    class Program
    {
        //Dispose(bool disposing) 呼び出し回数チェック用
        public static int i = 1;

        public static void Main()
        {
            var ds = new DisposeSample();
            WriteLine("new DisposeSample()");
            WriteLine("Dispose()実行します。");
            ds.Dispose();
            WriteLine("Dispose()をもう一度実行します。");
            ds.Dispose();
        }
        public class DisposeSample : IDisposable
        {
            // Dispose(bool disposing)を少なくとも1回呼び出したか
            //重複での呼び出し防止
            private bool disposedValue = false; 

            protected virtual void Dispose(bool disposing)
            {
                Console.WriteLine("Dispose呼び出し:"+ i++ +"回目"); ;

                if (!disposedValue)
                {
                    if (disposing)
                    {
                        // マネージ リソースを ここで解放
                        WriteLine("■マネージ リソースを ここで解放。");
                    }

                    // アンマネージリソース ここで解放する。
                    WriteLine("■アンマネージリソース ここで解放。");

                    disposedValue = true;
                }
            }

            // ファイナライザ ( デストラクタ )
            ~DisposeSample()
            {
                //アンマネージ リソース を明示的に解放
                //Dispose()を一度呼んでいれば
                //マネージ リソース は解放済み のはず
                Dispose(false);
            }

            // このコードは、破棄可能なパターンを正しく実装できるように追加されました。
            public void Dispose()
            {
                //マネージ リソース を明示的に解放
                //アンマネージも ついでに? 解放
                Dispose(true);

                //ファイナライザを抑止
                GC.SuppressFinalize(this);

            }

        }

    }

参考

確保したリソースを忘れずに解放するには?

0
0
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
0
0