我有一个实现接口IDisposable的类。我的理解是,当你完成使用对象(如下面的行)之后,调用Dispose方法以确保清理所有内容 - 这是正确的吗?
myObj = null;
我还想知道是否抛出异常是否仍然调用Dispose方法?或者我应该使用'使用'块?
答案 0 :(得分:2)
我的理解是,当你完成对象的使用时(类似下面这一行),调用Dispose方法以确保清理所有内容 - 这是正确的吗?
不,这不正确。将对象的实例设置为null
将不调用其Dispose
方法,您应该在完成对象后明确地执行此操作。
myObj.Dispose();// Im done with myObj!
通常使用using
using(var myObj = new MyObject())
{
myObj.DoSomething();
} // Dispose automatically called.
以上确保调用Dispose
,即使在using
块中抛出异常也是如此。
答案 1 :(得分:1)
如果要在该特定时刻释放此对象使用的系统资源,则应显式调用Dispose。如果我们不调用Dispose,系统将在某些时候使用垃圾收集器来处理这个问题。
如果一个对象实现了System.IDisposable,那么我们就可以在其上调用dispose方法。
使用 将转换为try,最后由CLR阻塞,并在finally块中调用dispose方法释放资源。
选中此链接,查看您需要的所有信息,例如系统如何处理此问题以及所有Using Statement
只需复制上述链接中的代码即可使其更有用。
如果你有这样的代码
using (MyResource myRes = new MyResource())
{
myRes.DoSomething();
}
然后它会自动转换为
MyResource myRes= new MyResource();
try
{
myRes.DoSomething();
}
finally
{
// Check for a null resource.
if (myRes!= null)
// Call the object's Dispose method.
((IDisposable)myRes).Dispose();
}