我有以下代码。
baseclass bc = new derivedclass();
在这种情况下是否会创建基类对象?如果是,GC将如何知道它正被使用(因为它没有指向它的任何变量)? GC如何处理这个?
编辑:当我设置bc = null时,将调用基类和派生类析构函数。如果没有创建基础对象,它如何调用基类析构函数?
如果没有基础对象,如何调用destuctor? 这就是MSDN关于析构函数的说法:“析构函数用于破坏类的实例”。
答案 0 :(得分:5)
不,只创建派生类的实例。当然,这将包含基类的所有字段,但它不是一个单独的对象。没有什么可以被垃圾收集。
请注意bc
只是一个变量,而不是一个对象。 bc
本身不需要进行垃圾收集 - 只是它可以阻止变量的垃圾收集,如果它可能被再次读取则引用它的值。 (如果没有任何内容可以再次从bc
读取,并且您没有在调试器下运行,则不会阻止对象被垃圾回收。)