このステートメントは C# で何を意味しますか?
using (object obj = new object())
{
//random stuff
}
このステートメントは C# で何を意味しますか?
using (object obj = new object())
{
//random stuff
}
これは、obj
実装され、ブロックIDisposible
の後に適切に破棄されることを意味します。using
機能的には次のものと同じです。
{
//Assumes SomeObject implements IDisposable
SomeObject obj = new SomeObject();
try
{
// Do more stuff here.
}
finally
{
if (obj != null)
{
((IDisposable)obj).Dispose();
}
}
}
using (object obj = new object())
{
//random stuff
}
以下と同等です。
object obj = new object();
try
{
// random stuff
}
finally {
((IDisposable)obj).Dispose();
}
なぜそれが存在するのですか。
特に、クラスが OS でリソースをラップしていて、すぐに解放したい場合に、クラスの寿命を気にするクラスのために存在します。それ以外の場合は、CLR の (非決定論的) ファイナライザーを待つ必要があります。
例、ファイル ハンドル、DB 接続、ソケット接続、....
オブジェクトのスコープを設定する方法であるため、終了時に dispose メソッドが呼び出されます。特にデータベース接続に非常に役立ちます。オブジェクトが idisposable を実装していない場合、コンパイル時エラーが発生します。
using
ブロックで未処理の例外が発生した場合でも、割り当てられたオブジェクトが using ブロックの後に適切に破棄されるようにします。