我认为如果一个C#数组持有引用类型,它只会持有对每个对象的引用,但下面的代码告诉我,否则。看起来好像数组持有对我认为被垃圾回收的对象的引用。我觉得我在这里错过了一些基本的东西。任何人都可以告诉我为什么在重新分配foo时数组引用不会改变?数组持有对已绝迹对象的引用
abstract class AbstractBaseClass
{
protected int _someProperty;
public virtual int SomeProperty
{
get
{
return _someProperty;
}
set
{
_someProperty = value;
}
}
}
class DerrivedClass1 : AbstractBaseClass
{
}
class DerrivedClass2 : AbstractBaseClass
{
public override int SomeProperty
{
get
{
return _someProperty + 1;
}
set
{
_someProperty = value;
}
}
}
static void Main()
{
AbstractBaseClass foo;
AbstractBaseClass bar;
AbstractBaseClass[] array = new AbstractBaseClass [1];
foo = new DerrivedClass1();
foo.SomeProperty = 99;
array[0] = foo;
Console.WriteLine("Value of foo.SomeProperty: " + foo.SomeProperty.ToString());
bar = new DerrivedClass2();
bar.SomeProperty = 99;
Console.WriteLine("Value of bar.SomeProperty: " + bar.SomeProperty.ToString());
foo = bar;
Console.WriteLine("Value of foo.SomeProperty after assignment: " + foo.SomeProperty.ToString());
Console.WriteLine("Value of array[0] after assignment: " + array[0].SomeProperty.ToString());
}
此外,这与垃圾收集无关。我建议抓取Jeffrey Richter的C#Via C#的副本。这本书适合你的关卡。 – Will 2010-07-01 17:15:42
感谢这本书,我现在正在阅读它。 – 2010-07-01 19:12:18