3

クラスが定義されているとします。

class TestClass
{
    MemoryStream s = new MemorySteam();

    void DoStuff()
    {
        using (s = new MemoryStream())
        {
            // Do stuff
        }
    }
}

susing ステートメントがスコープを出るとどうなりますか?

編集:別の方法で使用すると問題が発生しsますか?

編集 2: MemoryStream の最初のインスタンス化から未処理のままの参照されていないオブジェクトはありますか?

4

3 に答える 3

7

Disposeメソッドが呼び出されます。(Dispose が使用可能であることを保証できるように、IDisposable インターフェイスを実装する必要があることに注意してください)

MSDNリファレンスはかなり良いIMOです

Phil Haack も 7 年前にこれに関する詳細な記事を書きました。

あなたの編集に更新

メソッドの dispose メソッドが呼び出されると、メソッドのスコープ外で使用しようとすると、例外がスローされます。したがって、使用以外で参照するのは悪いことです。正確には、ObjectDisposedException をスローします。

于 2012-08-29T18:10:19.597 に答える
6

Dispose メソッドが呼び出されます。

using ステートメント (C# リファレンス)

于 2012-08-29T18:10:35.743 に答える
2

このオブジェクトを消去するために、オブジェクトで Dispose メソッドが呼び出されます

管理されていないオブジェクトは GC によってクリーンアップされないため、それらをクリーンアップするために using を呼び出します。

GC には非管理対象オブジェクトに関する情報がないため、開発者はクリーンアップする必要があります

于 2012-08-29T18:10:50.527 に答える