28

Usingステートメントで破棄される複数のオブジェクトを処理するにはどうすればよいですか?

サンプルコード

using(MyClass obj = new MyClass())
{
    MyOtherClass objOC= new MyOtherClass()
    TextReader objTR = new StringReader(...);  
    // other code
}

MyClass objMyOtherClass objOCは Using ブロックの最後に配置されますが、とはどうでしょうか TextReader objTR。私が知る限り、それらは破棄されないので、以下のようにネストされた Using ブロックをそこに置く必要がありますか? オブジェクト数が増えると本当のワイドスクリーンモニターが必要になる

以下は正しいでしょうか?

using(MyClass obj = new MyClass())
{
    using (MyOtherClass objOC= new MyOtherClass())
    {
        using (TextReader objTR = new StringReader(...))
        {
           //code using all three objects 
        }   
    } 
    // other code using just `MyClass obj`
}

MyClass と MyOtherClass の両方を実装IDisposable

4

2 に答える 2

61

はい、あなたのコードは正しいです。他に知っておくべきことがいくつかあります...

単一の using ステートメントで、同じ型の複数のオブジェクトを宣言できます。ドキュメントから:

using (Font font3 = new Font("Arial", 10.0f), 
            font4 = new Font("Arial", 10.0f))
{
    // Use font3 and font4.
}

異なるタイプの複数のオブジェクトを使用するには、スペースを節約するために 1 行の構文を使用してネストできます。

using (MyClass obj = new MyClass())
using (MyOtherClass objOC= new MyOtherClass())
using (TextReader objTR = new StringReader(...))
{
    // code using all three objects 
}   
于 2012-09-26T13:42:22.637 に答える
2

はい、それらすべての呼び出しを保証したい場合は、2 番目の例のようにステートメントDispose(..)内にそれらを囲む必要があります。using

usingまたは、単一のステートメント内で複数のオブジェクトを宣言できます。コーディング スタイルとコード フローの問題です。

于 2012-09-26T13:42:22.700 に答える