2012-04-07 8 views
2

可能性の重複:
What is the C# Using block and why should I use it?usingステートメントはいつ使用しますか?

私はC#に古いサイトを変換していると私は私が '使用' を使用する必要があるときにはよく分かりません。一般的なガイドラインはありますか?私は利益を知っていますが、私はそれをどのように使うべきか100%確信していません。それは私が「新しい」メソッド/プロパティのたびにですか?

+0

まず、「使用する」ことが完全に理解されていることを確認してから、はるかに簡単にする必要があります。このmsdnページを参照してください。http://msdn.microsoft.com/en-us/library/yh598w02%28v=vs.100%29.aspx –

答えて

0

を使用するには、あなたがリソースを処分アウトでブロックを終了することができないことを保証することを可能にする便利です。 IDisposable実装者をローカルコードブ​​ロックで利用する必要があるときはいつでも利用できます。

3

MSDN:原則として

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

usingステートメントは、オブジェクトのメソッドを呼び出すときに 例外が発生した場合でもDisposeが確実に呼び出されます。 tryブロック内にオブジェクトを入れて同じ結果を得て、 finallyブロックでDisposeを呼び出しても同じ結果が得られます。実際には、これは usingステートメントがコンパイラによってどのように翻訳されるかです。コード例 は、以前の(オブジェクトの限られた範囲を作成するために余分 中括弧に注意)コンパイル時に、次のコードに展開:

例:

using (StreamReader stream = new StreamReader("path")) 
{ 
    string line = stream.ReadLine(); 
} 
11

をクラスがIDisposableを実装している場合あなたがそれらの使用を終えたときに「処分」される必要があるいくつかの管理されていないリソースが作成されます。例外がスローされた場合は特に、あなたは自動的にを配置呼び出すためにusing構文を使用することができ、(この場合は、データベース接続を閉じる)resoursesを処分することを忘れないようにするには

SqlConnection awesomeConn = new SqlConnection(connection); 

// Do some stuff 

awesomeConn.Dispose(); 

:だからあなたのような何かをするだろうあなたはusingステートメントのスコープの外に行く:すべてのOのために使用して

try 
{ 
    SqlConnection awesomeConn = new SqlConnection(connection); 

    // do some stuff 
} 
finally 
{ 
    awesomeConn.Dispose(); 
} 
1

用途:

using (SqlConnection awesomeConn = new SqlConnection(connection)) 
{ 
    // Do some stuff 
} // automatically does the .Dispose call as if it was in a finally block 

実際には、使用するブロックは同等ですあなたの生涯が現在の実行範囲を超えていない限り、IDisposableを実装するインスタンス化するオブジェクト(つまり、メソッド呼び出し)。その場合、たとえば、使い捨てのメンバー変数がある場合、その包含クラスはIDisposableメンバーとDisposeメンバーをそのDisposeに実装する必要があります。

関連する問題