ClassA和ClassB有两个类。 ClassB扩展了ClassA。 ClassA和ClassB中都有非托管资源。 所以问题是:应该为这两个类提供Dispose()方法,还是为ClassA提供Dispose就足够了
EDIT1: 通过我到目前为止的反应,我认为我的陈述被误解为ClassB继承自ClassA。访问以下链接可以理解我的意思:
答案 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
}
。