分類:[.NET 全般]
メモリについて初歩的な質問ですが、次のようなTestClassが消えるのか教えてください。
(ガベージコレクションで回収可能な状態)
Sample1メソッドを実行した場合
Test1のなかで作成されたlocalClassはTest1のメソッドを抜けても
呼び出しもとのSample1で参照されているので消えないのは理解できています。
またSample1を抜けたときに参照されているものが無くなるためにlocalClassが
消えるのも理解できています。
Sample2メソッドを実行した場合
Sample2を抜けたときにTestParentとTestChildはお互いに参照しているのですが
消えるのでしょうか?
public class TestClass
{
public TestClass _parent;
public TestClass _child;
public TestClass() {}
public TestClass Parent
{
set { _parent = value; }
get { return _parent; }
}
public TestClass Child
{
set { _child = value; }
get { return _child; }
}
}
-------------------------------------------
void Sample1()
{
TestClass a = Test1();
}
TestClass Test1()
{
TestClass localClass = new TestClass();
return localClass;
}
--------------------------------------------
void Sample2()
{
TestClass a = Test2();
}
TestClass Test2()
{
TestClass TestParent = new TestClass();
TestClass TestChild = new TestClass();
TestParent.Child = TestChild;
TestChild.Parent = TestParent;
return TestParent;
}
|