3

次のメソッドを定義したとします。

static object F()
{
    return new object();
}

次のようなコードを書くと、返さobjectれた はスコープの最後までガベージ コレクションできません。

{
    object x = F();
    // cannot yet garbage collect the object
    // returned by F (referenced as variable x)
}
// can now garbage collect the object
// returned by F (referenced as variable x)

以下のようなコードを書くと、objectreturn を return 直後にガベージコレクションできFます。

{
    F();
    // can now garbage collect the object
    // returned by F
}

しかし、ここで の定義をF次のように変更したとします。

static IDisposable F()
{
    return new SomeDisposableObject();
}

次のようなコードを書くと、返されたオブジェクトはガベージ コレクションできず、usingブロックの最後まで破棄されません。

using (IDisposable x = F())
{
} // immediately x.Dispose()
// can now garbage collect the object
// returned by F

次のようなコードを書くと、どのような動作になりますか? C# 言語仕様への参照はプラスです。

using (F())
{
}

ブロックはusing、によって返されるインスタンスへの参照としてカウントされFますか?

4

2 に答える 2