广州北大青鸟

- 联系电话 - - 来校路线 - 广州市天河区五山路金华园区3楼307
您现在的位置: 广州北大青鸟华工金华园校区 >> .net培训 >> .net文章 >> 正文
.Net中的弱引用 作者:佚名    .net培训来源:本站原创    点击数:    更新时间:2017-1-6

  弱引用是什么?

  要搞清楚什么是弱引用,我们需要先知道强引用是什么。强引用并不是什么深奥的概念,其实我们平时所使用的.Net引用就是强引用。例如:

  Cat kitty = new Cat();

  变量kitty就是一个强引用,它指向了堆中的一个Cat对象实例。我们都知道,CLR的垃圾回收机制会标记所有被强引用到的对象,而那些剩下的未被标记的对象则会被垃圾回收。换句话说,如果一个对象一直被某个强引用所指向,那么它是不会被垃圾回收的。

  从这一点来看,弱引用就完全不一样了——即使某个对象被弱引用所指向,该对象仍然会被垃圾回收。也就是说,弱引用不会影响对象的生命周期。

  System.WeakReference类是.net为我们提供的一个弱引用的实现,可以这么用:

  WeakReference weakReference = new WeakReference(new Cat());

  Cat strongReference = weakReference.Target as Cat;

  if (strongReference != null)

  {

  // Cat对象实例尚未被垃圾回收,可以通过strongReference进行访问

  }

  else

  {

  // Cat对象实例已被垃圾回收

  }

  如果在上例的第一行代码之后第二行代码之前,CLR发生了一次垃圾回收,那么可以基本断定那个Cat对象实例已经不存在了,此时weakReference.Target是null。

  WeakReference类型还有一个构造函数的重载为:

  Public WeakReference(Object target, bool trackResurrection)

  其中bool类型的参数trackResurrection指定了这个WeakReference实例是一个长弱引用还是一个短弱引用。对于短弱引用,当它所指向的对象被垃圾回收机制标记为“不可达”状态(即将被回收)时,该弱引用的Target属性即为null。而对于长弱引用,当它所指向对象的析构函数被调用之后,它的Target属性仍然是有效的。

ACCP课程 |BENET课程| 网站地图 Copyright 2006-2017 All Rights Reserved 广州青大教育信息咨询有限公司备案/许可证编号为粤ICP备11070650号-22北大青鸟北京总部:北京阿博泰克北大青鸟信息技术有限公司 广州北大青鸟官方网址:www.gzbdqn.com.cn学校地址:广州市天河区五山路华南理工大学科技园金华园区3楼307(华工南门)