0

IDisposableInterface を実装し、以下のコードで class を実装しましたA

クラスのオブジェクトも破棄する必要がありBますか?

        public class A : IDisposable
        {
            private B _objB = null;

            public A()
            {
                _objB = new B();
            }

            public void Load(string fileName, int loadFlags)
            {
                _objB .Load(fileName, 0);
            }
            public void Close()
            {
                _objB .Reset();
            }

            public void Dispose()
            {
                GC.SuppressFinalize(this);
            }
        }

voidDispose()メソッドでは、クラスを破棄AGC.SuppressFinalize(this)ます。

クラスでクラスAを宣言するBので、同じものを使用して破棄する必要がありますC.SuppressFinalize(_objB);

4

1 に答える 1

4

GC.SuppressFinalize() の機能を完全に誤解しています。クラスにデストラクタ (別名ファイナライザ) がある場合にのみ問題になります。あなたはそうしないので、それを呼び出さないでください。B が実際に IDisposible を実装している場合は、それを破棄します。

    public void Dispose()
    {
        _objB.Dispose();
    }

_objB を複数回安全に破棄できること、および破棄後に使用すると ObjectDisposedException が既に生成されていることを前提としています。

于 2013-07-09T08:36:53.527 に答える