在浏览了很多相关文章后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()
方法,dispose 属性databaseConnection
用于释放连接(this.databaseConnection.Dispose();
).
我的问题是为什么我们需要实施IDisposable
在这种情况下?我们可以直接调用this.databaseConnection.Dispose()
并释放连接。为什么要实施IDisposable
当在内部时它也调用Dispose()
对象的方法?
替代方法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 的类表明您should处理它,并使用 Dispose 方法进行处理。换句话说,使用 IDisposable 模式立即告诉另一个开发人员,他应该释放该类所持有的资源,并且他应该通过调用Dispose
method.
实施的另一个好处IDisposable
是 using 块,适用于任何 IDisposable 类:
using(var t = new Test())
{
// use t
}
使用上面的代码将导致t
being Dispose()
编辑于末尾using
堵塞。它是一个语法糖try
...finally
block,但它往往会让这种代码更加简洁,更容易阅读和编写。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)