Gui*_*rez 23 c# dispose using using-statement
该using语句是否始终处置该对象,即使有一个返回或异常被抛入其中?IE:
using (var myClassInstance = new MyClass())
{
// ...
return;
}
Run Code Online (Sandbox Code Playgroud)
要么
using (var myClassInstance = new MyClass())
{
// ...
throw new UnexplainedAndAnnoyingException();
}
Run Code Online (Sandbox Code Playgroud)
Ed *_* S. 32
是的,这就是重点.它编译为:
SomeDisposableType obj = new SomeDisposableType();
try
{
// use obj
}
finally
{
if (obj != null)
((IDisposable)obj).Dispose();
}
Run Code Online (Sandbox Code Playgroud)
这里要小心你的术语; 对象本身未被释放.Dispose()调用该方法,通常释放非托管资源.
Adr*_*der 10
如果对象实现了IDisposable,则会调用它.
从MSDN使用Statement(C#Reference)
定义一个范围,在该范围之外将放置一个或多个对象.
using语句允许程序员指定何时使用资源的对象应该释放它们.提供给using语句的对象必须实现IDisposable接口.此接口提供Dispose方法,该方法应释放对象的资源.
不,不是。
但是,这不是故障的using说法虽然。这是因为finallyCLR 如何处理块。在某些情况下,finally块将无法执行。如果您有未处理的异常,并且CLR 认为执行更多的代码将导致更多的错误,则它将不会执行Dispose方法(因为它不会执行编译到方法的finally块Dispose。)。因此,要非常小心,不要将生命投入到Dispose方法的执行中。
可能导致Dispose方法无法执行的其他情况可以列为:
OutOfMemoryException和 StackOverflowException
杀死进程
电力流失