如何在扩展类的情况下处理非托管资源?

时间:2014-03-08 18:26:07

标签: c# .net

ClassA和ClassB有两个类。 ClassB扩展了ClassA。 ClassA和ClassB中都有非托管资源。 所以问题是:应该为这两个类提供Dispose()方法,还是为ClassA提供Dispose就足够了

EDIT1: 通过我到目前为止的反应,我认为我的陈述被误解为ClassB继承自ClassA。访问以下链接可以理解我的意思:

2 个答案:

答案 0 :(得分:3)

您必须从孩子那里拨打基地Dispose。在B类中实现Dispose将覆盖继承的方法。这是因为默认情况下C#中的方法是虚拟的(如果在子类中重新实现,则会调用重新实现)。

// Class B

public void Dispose()
{
    base.Dispose();

    // Dispose the rest (unmanaged B)
}

答案 1 :(得分:0)

这取决于ClassB是否引入了新的可支配资源。如果是这样,ClassA的{​​{1}}方法将无法处置Dispose的新资源。在ClassB

中使用此模式
ClassA

// In ClassA public void Dispose() { Dispose(true); // Only if you are using a finalizer GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposing) { // get rid of managed resources } // get rid of unmanaged resources } 中,您可以覆盖虚拟ClassB方法,而不必重新实现Dispose(bool disposing)接口。

IDisposable

终结者会拨打// In ClassB protected override void Dispose(bool disposing) { base.Dispose(disposing); if (disposing) { // get rid of managed resources declared in ClassB } // get rid of unmanaged resources declared in ClassB }