次のメソッドを定義したとします。
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ますか?