私はこれを見る:
using (StreamWriter sw = new StreamWriter("file.txt"))
{
// d0 w0rk s0n
}
私が情報を見つけようとすることはすべて、これが何をしているのかを説明するものではなく、代わりに名前空間に関するものを私に与えてくれます。
(名前空間に関するusingディレクティブの代わりに)usingステートメントのドキュメントを確認したい。
try
基本的には、ブロックが/finally
ブロックに変換さsw.Dispose()
れ、finallyブロックで呼び出されることを意味します(適切なヌルチェックを使用)。
実装する型を扱う場合はいつでもusingステートメントを使用できます。IDisposable
通常は、責任を負う使い捨てオブジェクトに使用する必要があります。
構文に関するいくつかの興味深い点:
1つのステートメントで複数のリソースを取得できます。
using (Stream input = File.OpenRead("input.txt"),
output = File.OpenWrite("output.txt"))
{
// Stuff
}
変数に割り当てる必要はありません。
// For some suitable type returning a lock token etc
using (padlock.Acquire())
{
// Stuff
}
中かっこなしでネストできます。インデントを回避するのに便利です
using (TextReader reader = File.OpenText("input.txt"))
using (TextWriter writer = File.CreateText("output.txt"))
{
// Stuff
}
using構文は、基本的に、using内のオブジェクトに対してdisposeを自動的に呼び出すための構文ラッパーです。たとえば、上記のコードは大まかに次のように変換されます
StreamWriter sw = new StreamWriter("file.text");
try {
// do work
} finally {
if ( sw != null ) {
sw.Dispose();
}
}
あなたの質問は仕様のセクション8.13によって答えられます。
どうぞ: http: //msdn.microsoft.com/en-us/library/yh598w02.aspx
基本的に、usingスコープの最後にIDisposableインターフェースのDisposeメンバーを自動的に呼び出します。