をusing
文の目的は、対象物の上にDispose
を呼び出すことですIDisposable
を実装しています。それを手動で行う方法はtry...finally
のステートメントですが、それはもっと醜いです。
この機能を終了しても、Dispose
は呼び出されません。ローカル変数は範囲外になり、オブジェクトをもう参照しません。オブジェクトがもはや参照を持たないということは、即座の反応を引き起こさない。これは、GC がから今後収集する可能性があることを意味します。
GCがそれらを収集するまで、ネイティブリソースが残りますので、後で可能です。または、Dispose
の中で削除されたオブジェクトへの他の参照がある場合、まったく収集されないこともあります。あなたはfinally
は何が起こるかに関係なくdisposeの呼び出しの面倒を見るように
{
ResourceType resource = expression;
try {
statement;
}
finally {
if (resource != null) ((IDisposable)resource).Dispose();
}
}
:参照型の
Using statement in the VB.net specification
そして、C#で(VB.netは非常に類似していなければならない)using
はに対応しますstatement
。関数を終了したり、例外をスローしたりしても、最後に実行されます。
OutOfMemory、StackOverflow、強制的なapp-domain unloadのような致命的なエラーは、それを実行しません。
私は決して.NETでプログラミングされていませんが、そのトピックは週に3回出てくるので、私は答えを知っています。平均的な.NETプログラマーは、彼の言語についてこのことを少し知っていますか? – delnan