10

重複の可能性:
C# Using ブロックとは何ですか? なぜそれを使用する必要があるのですか?

古いサイトを C# に変換していますが、'using' をいつ使用すべきかわかりません。一般的なガイドラインはありますか?利点は知っていますが、その使用方法が 100% わかっているわけではありません。メソッド/プロパティを「新規」にするたびですか?

SqlConnection awesomeConn = new SqlConnection(connection);
4

5 に答える 5

10

MSDN :

原則として、IDisposable オブジェクトを使用する場合は、using ステートメントで宣言してインスタンス化する必要があります。using ステートメントは、オブジェクトの Dispose メソッドを正しい方法で呼び出します。また、(前に示したように使用すると)、Dispose が呼び出されるとすぐに、オブジェクト自体がスコープ外になります。using ブロック内では、オブジェクトは読み取り専用であり、変更したり再割り当てしたりすることはできません。

using ステートメントを使用すると、オブジェクトのメソッドを呼び出しているときに例外が発生した場合でも、Dispose が確実に呼び出されます。オブジェクトを try ブロック内に配置してから、finally ブロック内で Dispose を呼び出すことによって、同じ結果を得ることができます。実際、これは using ステートメントがコンパイラによってどのように変換されるかです。前のコード例は、コンパイル時に次のコードに展開されます (オブジェクトの制限されたスコープを作成するために追加の中かっこに注意してください)。

例:

using (StreamReader stream = new StreamReader("path")) 
{
     string line = stream.ReadLine();
}
于 2012-04-07T18:54:34.450 に答える
0

オブジェクトを自動的に破棄する場合によく使用されます。それ以外の場合は、手動で myobj.Dispose() を呼び出す必要があります。

こちらのリファレンス ドキュメントを参照してください: http://msdn.microsoft.com/en-us/library/yh598w02.aspx

于 2012-04-07T18:53:47.177 に答える
0

を使用すると、リソースを破棄せずにブロックを終了できないことを保証できる便利な方法です。ローカル コード ブロックで IDisposable インプリメンターを使用する必要がある場合はいつでも使用できますし、使用する必要があります。

于 2012-04-07T18:54:13.010 に答える