私はしばらくの間いくつかのコードに取り組んできました。そして私は質問をしました:
これら2つのコードの違いは何ですか?
using (FORM formExemple = new FORM ())
{
formExemple.ShowDialog();
}
と
FORM formExemple = new FORM ();
formExemple.ShowDialog();
私はしばらくの間いくつかのコードに取り組んできました。そして私は質問をしました:
これら2つのコードの違いは何ですか?
using (FORM formExemple = new FORM ())
{
formExemple.ShowDialog();
}
と
FORM formExemple = new FORM ();
formExemple.ShowDialog();
using
オブジェクトのDispose()
メソッドを呼び出して、完了時にそれ自体をクリーンアップします。通常、開いている接続を閉じたり、メモリを解放したりするなどの処理を行います。それ以外の方法でインスタンス化する場合は、手動で行う必要があります。using
インターフェイスを実装するオブジェクトでのみ使用できます。これにより、オブジェクトIDisposable
のメソッドが確実にDispose()
存在します。
usingブロックは、を実装するオブジェクトを自動的に破棄するために使用されますIDisposable
。最初Dispose()
のものはブロックの終わりに呼び出されます。usingブロックは、例外が発生した場合にオブジェクトが適切に破棄されることも保証します。
2つ目は、オブジェクトが不要になると開発者が確信している場合は、開発者が処理する必要はなく、処理する必要があります。
いつものように、ドキュメントを参照してください-ステートメントのMSDN C#ガイドusing
またはC#仕様(C#5仕様のセクション8.13)。
このusing
ステートメントは、を実装する型でのみ使用できIDisposable
、基本的に、例外がスローされた場合でも、最初の式(リソース取得式)に表示されるすべてのリソースがブロックの最後に配置されるようにします。最初のコードスニペットは、おおむね次のものと同等です。
FORM formExemple = new FORM(); // I hope you don't *really* use these names
try
{
formExemple.ShowDialog();
}
finally
{
formExemple.Dispose();
}
それよりも少しだけ多くのことがあります。
using
ステートメント自体です。using
ステートメント内の変数への変更に対処します(元の値は引き続き破棄されます)基本的に、ネットワークストリーム、ファイルハンドル、データベース接続、グラフィックスオブジェクトなど、タイムリーな廃棄が必要なリソースのクリーンアップが容易になります。
using
IDisposableインターフェースを実装しているオブジェクトで使用できるものです。を使用する理由は、フォームが完成したら、クリーンアップについて心配する必要がないためです。フォームのDisposeメソッドが呼び出され、すべてがクリーンアップされます。
2番目の例では、Disposeが呼び出されることはなく、オブジェクトはまだメモリ内にあり、ガベージコレクタがクリーンアップする必要があることを認識しない場合はしばらくの間存在する可能性があります。
使用ステートメント..。
using (Font font1 = new Font("Arial", 10.0f))
{
byte charset = font1.GdiCharSet;
}
...は、次のパターンの構文ショートカット(構文糖衣)です。
{
Font font1 = new Font("Arial", 10.0f);
try
{
byte charset = font1.GdiCharSet;
}
finally
{
if (font1 != null)
((IDisposable)font1).Dispose();
}
}
(上記のリンクから例を取りました)
...したがって、2つのコードスニペットの違い+-ブロック内try
の呼び出し。IDisposable.Dispose()
finally
usingステートメントはformExempleのスコープを定義します。formExempleに割り当てられたメモリは、usingステートメントの制御外で解放されると解放されます。