GC如何收集基类?

时间:2011-07-20 08:17:18

标签: c#

我有以下代码。

baseclass bc = new derivedclass();

在这种情况下是否会创建基类对象?如果是,GC将如何知道它正被使用(因为它没有指向它的任何变量)? GC如何处理这个?

编辑:当我设置bc = null时,将调用基类和派生类析构函数。如果没有创建基础对象,它如何调用基类析构函数?

如果没有基础对象,如何调用destuctor? 这就是MSDN关于析构函数的说法:“析构函数用于破坏类的实例”。

1 个答案:

答案 0 :(得分:5)

不,只创建派生类的实例。当然,这将包含基类的所有字段,但它不是一个单独的对象。没有什么可以被垃圾收集。

请注意bc只是一个变量,而不是一个对象。 bc本身不需要进行垃圾收集 - 只是它可以阻止变量的垃圾收集,如果它可能被再次读取则引用它的值。 (如果没有任何内容可以再次从bc读取,并且您没有在调试器下运行,则不会阻止对象被垃圾回收。)