C# 如果是扩展类,如何处理未管理的资源?
有两个类别A和B。ClassB扩展了ClassA。类A和类B中都有非托管资源。 所以问题是:应该为这两个类提供Dispose()方法还是为ClassA提供Dispose()方法就足够了 编辑1:C# 如果是扩展类,如何处理未管理的资源?,c#,.net,C#,.net,有两个类别A和B。ClassB扩展了ClassA。类A和类B中都有非托管资源。 所以问题是:应该为这两个类提供Dispose()方法还是为ClassA提供Dispose()方法就足够了 编辑1: 到目前为止,我得到的答复是,我认为我的陈述被误解为ClassB继承自ClassA。我的意思可以通过访问以下链接来理解: 页面 页面 您必须从子进程调用基进程Dispose。在类B中实现Dispose,将覆盖继承的方法。这是因为方法在C#中默认是虚拟的(如果在子类中重新实现,将调用重新实现) 这取决于C
到目前为止,我得到的答复是,我认为我的陈述被误解为ClassB继承自ClassA。我的意思可以通过访问以下链接来理解:
- 页面
- 页面
- 您必须从子进程调用基进程
Dispose
。在类B中实现Dispose
,将覆盖继承的方法。这是因为方法在C#中默认是虚拟的(如果在子类中重新实现,将调用重新实现)
这取决于
ClassB
是否引入了新的可支配资源。如果这样做,ClassA
的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
}
终结器将调用Dispose(false)代码>根据我目前得到的答复,我认为我的陈述被误解为ClassB继承自ClassA。我的意思可以通过访问以下链接来理解:你能扩展你的问题并强调你需要什么吗?这些文章完全是关于其他东西的(扩展方法)
// 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
}