只要存在对它们的某种引用,.NET 中的对象就存在。不存在的对象不包含对任何内容的引用。如果在垃圾回收周期中发现一个对象在除WeakReference
目标之外的任何地方都没有对其的引用,则系统将使这些WeakReference
对象无效,因此这些对象将不再有任何指向它们的引用,因此将不复存在。如果对某个对象的唯一非弱引用在系统的已注册Finalize
方法的对象列表中,则该对象将从该列表中删除并添加到系统的对象列表中,该对象的Finalize
方法应在第一时间运行。一旦系统运行的是一个对象的Finalize
方法,它将从后一个列表中删除,除非引用已存储在其他地方,否则它将不复存在。
有一个 dispose 方法的原因Image
是它的构造经常要求创建不是 .NET 对象的东西和/或要求外部实体代表它做一些事情(例如授予对文件的独占读取访问权限)。如果 aBitmap
在没有被调用的情况下被放弃Dispose
,并且如果它没有Finalize
方法,则该Bitmap
对象将不复存在,但它请求创建的任何外部对象将继续存在,任何代表它执行操作的外部实体将继续存在将继续这样做。
因为字节数组的创建不需要构造任何不是 .NET 对象的东西,也不需要任何外部实体代表它做任何事情,所以不需要一个不再需要的数组做任何事,除了不复存在。对于拥有这样一个数组的对象也是如此。