在浏览了很多关于 IDisposable
的文章后,我对它的用法感到困惑。所有文章都解释了它是什么以及如何实现它,但我想了解如果没有它我们将会错过什么。
这是一个实现IDisposable
类的示例。 dispose 的使用通常显示为处理数据库连接。
public class Test : IDisposable
{
public Test()
{
DatabaseConnection databaseConnection = new DatabaseConnection();
}
public void Dispose()
{
if (this.databaseConnection != null)
{
this.databaseConnection.Dispose();
this.databaseConnection = null;
}
}
}
尽管 Dispose()
已实现,但在 Dispose()
方法内部,databaseConnection
的 dispose 属性用于释放连接( this.databaseConnection.Dispose();
).
我的问题是为什么我们需要在这种情况下实现IDisposable
?我们可以直接调用this.databaseConnection.Dispose()
和释放连接。为什么在内部还调用对象的 Dispose()
方法时实现 IDisposable
?
替代IDisposable
的方法,我们可以实现一个方法Release()
来释放内存。
public class Test
{
public Test()
{
DatabaseConnection databaseConnection = new DatabaseConnection();
}
public void Release()
{
if (this.databaseConnection != null)
{
this.databaseConnection.Dispose();
this.databaseConnection = null;
}
}
}
这两种方法有什么区别?我们真的需要 IDisposable
吗?我期待着具体的解释。
最佳答案
你是对的,使用你的 Release 方法你会得到完全相同的效果,前提是你总是记得调用它。
你应该为这类事情使用 Dispose
/IDisposable
的原因是一致性。所有 .NET 开发人员都知道 IDisposable 模式,IDisposable 类表示您应该处理它,并使用 Dispose 方法来处理它。换句话说,使用 IDisposable 模式会立即告诉另一个开发人员,他应该释放该类占用的资源,并且他应该通过调用 Dispose
方法来完成。
实现 IDisposable
的另一个好处是 using block ,它适用于任何 IDisposable 类:
using(var t = new Test())
{
// use t
}
使用上面的代码将导致 t
在 using
block 的末尾被 Dispose()
ed。它是 try
...finally
block 的语法糖,但它往往使这种代码更简洁,更易于阅读和编写。
关于c# - 编写我们自己的 Dispose 方法而不是使用 Idisposable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3845542/