Pages

2009-04-30

using區塊與Dispose()

一般程序員都知道,使用using block可以在離開區塊時自動呼叫Dispose() (假如有實作IDisposable的話),為什麼可以這樣呢? 其實是.NET Compiler的貼心轉譯,會自動轉成以下的寫法:
using (MyClass myClass = new MyClass())
{
myClass.DoSomething();
}

Compiler自動轉成:
using (MyClass myClass = new MyClass())
{
MyClass myClass = new MyClass();
try
{
myClass.DoSomething();
}
finally
{
IDisposable dis = myClass as IDisposable;
if (dis != null)
{
dis.Dispose();
}
}

有時候了解Compiler的真正運作方式,能幫助程序員更有信心決定使用時機。



原文: http://www.codeproject.com/KB/cs/using_and_IDisposable.aspx

No comments: