c# - 在 C# 中转换为派生类和垃圾回收

标签 c# casting garbage-collection

嘿,我对某事很好奇。如果我在一个方法中创建一个派生类,然后返回一个指向基类的指针,并且所有其他指向它是派生类这一事实的引用都消失了,是什么阻止了垃圾收集器对属于派生类的变量进行垃圾收集类(class)?如果没有任何东西指向派生类变量,那 block 内存会立即释放吗?

如果我然后将基类指针转换回派生类,是否意味着派生类变量中的数据可能不再存在?

最佳答案

在 C++ 的实现中,“作为派生类”指向一个对象的指针和“作为基类”指向同一对象的指针被实现为不同的指针是很常见的。在 CLR 中不是这种情况;当您将对派生类的引用转换为对基类的引用时,引用的位不会改变。每个引用都“知道”它自己的运行时类型,因此垃圾收集器永远不会混淆。

关于c# - 在 C# 中转换为派生类和垃圾回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15286135/

相关文章:

javascript - 了解 Chrome GC 的异步方法

c# 将行添加到数据网格组合框

c# - 如何使用 RegEx 分隔数字和字符?

c# - 如何显式地从 Nullable<T> 进行转换

java - 从内部类访问通用外部类字段而不进行强制转换

.net - SqlCommand.Dispose 是否关闭连接?

c# - 溢出我的内存,强制垃圾收集器?

c# - Razor @Html.ValidationMessageFor() 不显示 "validation error message"

c# - 如何使用 LINQ 分离列条目和计数

Java 泛型 : Unchecked cast from List<capture#10-of ? > 到 List<Object>