嘿,我对某事很好奇。如果我在一个方法中创建一个派生类,然后返回一个指向基类的指针,并且所有其他指向它是派生类这一事实的引用都消失了,是什么阻止了垃圾收集器对属于派生类的变量进行垃圾收集类(class)?如果没有任何东西指向派生类变量,那 block 内存会立即释放吗?
如果我然后将基类指针转换回派生类,是否意味着派生类变量中的数据可能不再存在?
最佳答案
在 C++ 的实现中,“作为派生类”指向一个对象的指针和“作为基类”指向同一对象的指针被实现为不同的指针是很常见的。在 CLR 中不是这种情况;当您将对派生类的引用转换为对基类的引用时,引用的位不会改变。每个引用都“知道”它自己的运行时类型,因此垃圾收集器永远不会混淆。
关于c# - 在 C# 中转换为派生类和垃圾回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15286135/