C# 写入测试对象是否已正确处理
编写测试以检查C# 写入测试对象是否已正确处理,c#,testing,dispose,C#,Testing,Dispose,编写测试以检查IDisposable接口的dispose方法在调用后是否正确释放非托管资源的好方法是什么 private bool disposed = false; protected virtual void Dispose(bool disposing) { if (disposed) return; if (disposing) { // Free any other
IDisposable
接口的dispose方法在调用后是否正确释放非托管资源的好方法是什么
private bool disposed = false;
protected virtual void Dispose(bool disposing)
{
if (disposed)
return;
if (disposing)
{
// Free any other managed objects here.
}
// Free any unmanaged objects here
theUnmanagedResource.Dispose();
disposed = true;
}
我想我可以检查disposed之后是否为false,但它不能保证资源得到管理
另一种方法是在unmanagedResources.Dispose()
之后设置unmanagedResource=null
,并在测试用例中检查之后是否为null。但在其他帖子中,他们指出,将disposed resources设置为null后不是一个好方法:如前所述,您可以检查是否直接调用了IDispose.Dispose(正确处理对象),然后在虚拟void Dispose中bool disposing将为true(bool disposing):
我不知道链接的问题是哪里不好?你可以模拟非托管资源并检查是否调用了dispose。与论坛网站不同,我们不使用“谢谢”或“感谢任何帮助”或签名。看见我编辑了你的标题。看看哪里的共识是“不,他们不应该”。
using System;
class BaseClass : IDisposable
{
// Flag: Has Dispose already been called?
bool disposed = false;
// Public implementation of Dispose pattern callable by consumers.
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
// Protected implementation of Dispose pattern.
protected virtual void Dispose(bool disposing)
{
if (disposed)
return;
if (disposing) {
// Free any other managed objects here.
//
}
// Free any unmanaged objects here.
//
disposed = true;
}
~BaseClass()
{
Dispose(false);
}
}