使用IDisposable接口来显示类的组成

本文关键字:显示 IDisposable 接口 使用 | 更新日期: 2023-09-27 18:21:48

我已经为类A实现了IDisposable接口和下面的代码。

我是否应该处理类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);
            }
        }

在void Dispose()方法中,我从GC.SuppressFinalize(this)中处置类A

在类A中,我声明类B,因此它需要使用相同的C.SuppressFinalize(_objB); 进行处理

使用IDisposable接口来显示类的组成

您完全误解了GC.SuppressFinalize()的作用。只有当你的类有一个析构函数(又称终结器)时,这才重要。你没有,所以不要调用它。如果B实际上实现了IDisposible,那么就处理它:

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

假设_objB可以安全地多次释放,并且在释放后使用它已经生成ObjectDisposedException。