かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Disposeパターン

基本ですが復習!!

    class MyObject : IDisposable
    {
        public void Dispose()
        {
            Dispoase(true);

            // システムにfinalize呼ばなくてもいいよ〜って教える
            GC.SuppressFinalize(this);
        }

        protected virtual void Dispoase(bool disposing)
        {
            if (disposing)
            {
                Console.WriteLine("MyObject::Dispose マネージドなリソース開放");
            }
            Console.WriteLine("MyObject::Dispose アンマネージドなリソース開放");
        }

        ~MyObject()
        {
            Dispoase(false);
        }
    }

    class DrivedMyObject : MyObject
    {
        protected override void Dispoase(bool disposing)
        {
            if (disposing)
            {
                Console.WriteLine("DrivedMyObject::Dispose マネージドなリソース開放");
            }
            Console.WriteLine("DrivedMyObject::Dispose アンマネージドなリソース開放");

            base.Dispoase(disposing);
        }
    }