在哪里调用基方法
本文关键字:方法 调用 在哪里 | 更新日期: 2023-09-27 18:33:09
编辑:对于热心的编辑,请阅读完整的问题In addition, since this question is not only about disposing
。
到目前为止,我已经看到了这个:
protected override Dispose(bool disposing)
{
base.Dispose(disposing);
if (disposing)
c.Dispose()
}
而这个:
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
// Dispose managed resources.
}
// There are no unmanaged resources to release, but
// if we add them, they need to be released here.
}
disposed = true;
// If it is available, make the call to the
// base class's Dispose(Boolean) method
base.Dispose(disposing);
}
Microsoft说CA2215: Dispose methods should call base class dispose
,在这里。此外,由于这个问题不仅与处置有关,因此这是Microsoft最后一行调用base
的另一个示例。
哪一个是正确的/最常见/更好的(如果有的话)?
您的第二个代码段是可疑的,具体取决于disposed
是否是基类的受保护字段。
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
// Dispose managed resources.
}
}
disposed = true;
base.Dispose(disposing); // wrong if base.Disposing() depends on disposed
}
要考虑的问题是基类和派生类之间的异常和依赖关系。因此,请使用 try/finally 并将基本调用放在最后。最通用的模式如下所示:
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
// Dispose managed resources.
}
}
base.Dispose(disposing);
disposed = true; // inherited or local field
}
如果您
愿意,这一切都与调用顺序或控制流有关。
在第一个示例中,首先调用基类base.Dispose()
的处置,然后在执行类本身的代码之后调用。在第二种情况下,反之亦然。
因此,从行为的角度来看,它们都是正确的,您必须选择最适合您当前要求的一种,它在同一程序中自然会有所不同。