かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

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