次のメソッドを定義したとします。
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)
以下のようなコードを書くと、object
return を 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
ますか?