使用IDisposable接口来移除类的组合

时间:2013-07-09 08:30:30

标签: c# idisposable

我已经实现了IDisposable接口,并在下面的代码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);
            }
        }

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

在课程A中,我声明了课程B,因此需要使用相同的C.SuppressFinalize(_objB);

进行处理

1 个答案:

答案 0 :(得分:4)

你完全误解了GC.SuppressFinalize()的作用。只有当你的类有一个析构函数(也就是终结器)时才有意义。你没有,所以不要打电话。如果B实际上实现了IDisposible,那么只需处理它:

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

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