2013-06-28 11 views
19

usingステートメントは、オブジェクトが返されたり、例外がスローされたりしても、常にオブジェクトを破棄しますか?オブジェクトがIDisposableインターを実装する場合、それはすなわち:"using"ステートメントは常にオブジェクトを破棄しますか?

using (var myClassInstance = new MyClass()) 
{ 
    // ... 
    return; 
} 

または

using (var myClassInstance = new MyClass()) 
{ 
    // ... 
    throw new UnexplainedAndAnnoyingException(); 
} 

答えて

29

はい、その点です。

SomeDisposableType obj = new SomeDisposableType(); 
try 
{ 
    // use obj 
} 
finally 
{ 
    if (obj != null) 
     ((IDisposable)obj).Dispose(); 
} 

ここでは用語に注意してください。オブジェクト自体は割り当て解除されません。 Dispose()メソッドが呼び出され、通常、アンマネージドリソースが解放されます。

10

呼び出されます。 using Statement (C# Reference)

から

オブジェクトまたはオブジェクトが に配置される外側うち、範囲を定義します。

usingステートメントを使用すると、 リソースが使用するオブジェクトがいつそれらを解放するかをプログラマが指定できます。 ステートメントを使用するオブジェクトには、IDisposableインターフェイスを実装する必要があります。このインターフェイス は、オブジェクトの リソースを解放するDisposeメソッドを提供します。

+0

+1は、オブジェクトがIDisposableを実装しなければならないことに注意してください。 – Tim

関連する問題