GC如何收集基类?

sub*_*ubs 0 c#

我有以下代码.

baseclass bc = new derivedclass();
Run Code Online (Sandbox Code Playgroud)

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

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

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

Jon*_*eet 5

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

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