かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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