.Net开发笔记(六)关于事件(续)
2013-01-17 18:01
253 查看
上一篇最后提到了怎么解决由“事件编程”引起的内存泄露问题,最后几句说到了由“弱引用”的概念引申出来“弱委托”。具体没说怎么去实现,这篇文章介绍一下具体实现过程。(请先看前一篇文章)
先来看一下MSDN上对Delegate(委托)的解释:
表示委托,委托是一种数据结构,它引用静态方法或引用类实例及该类的实例方法。
我们先不去管网上对“委托”的其他形象比如,比如“类似函数指针”、“对同一类方法的签名”等等。先来看看MSDN上的解释是个什么意思。首先它是一种数据结构,基本可以看做包含两个东西,一个是方法,一个是方法的所有者,即对象(静态方法的所有者为类)。那么我们可以简单的用图来画一下:
View Code
被注释部分事件发布者与观察者之间属于弱关联,观察者能够正常死亡;未被注释部分事件发布者与观察者属于强关联,观察者不能正常死亡。
运行结果如下:
图3
图4
本文代码均已调试通过,环境(XP+.net 3.5)。
本文所有事件,均没有考虑“多线程”情况。
希望有帮助,O(∩_∩)O~
先来看一下MSDN上对Delegate(委托)的解释:
表示委托,委托是一种数据结构,它引用静态方法或引用类实例及该类的实例方法。
我们先不去管网上对“委托”的其他形象比如,比如“类似函数指针”、“对同一类方法的签名”等等。先来看看MSDN上的解释是个什么意思。首先它是一种数据结构,基本可以看做包含两个东西,一个是方法,一个是方法的所有者,即对象(静态方法的所有者为类)。那么我们可以简单的用图来画一下:
View Code
class Program { static void Main(string[] args) { //Subject sub = new Subject(); //事件发布者 //Observer obs = new Observer(); //事件观察者 //obs.RegisterXX1(sub); //观察者注册事件XX1,两者建立关联 //sub.DoSomething(); //发布者激发事件 ////输出XX1 event raised! ////强制GC回收obs内存,结束obs的生命期 //obs = null; //GC.Collect(); //Console.WriteLine("obs is 'dead'?!"); //sub.DoSomething(); //再次激发事件 ////obs已死,不会再响应XX1事件 //Console.Read(); Subject sub = new Subject(); //事件发布者 Observer obs = new Observer(); //事件观察者 obs.RegisterXX1(sub); //观察者注册事件XX1,建立关联 obs.RegisterCommonEvent(sub); //观察者注册事件CommonEvent,建立关联 sub.DoSomething(); //事件发布者激发事件 //输出 XX1 event raised! // CommonEvent event raised! //强制GC回收obs内存,结束obs的生命期,但是徒劳!!! obs = null; GC.Collect(); Console.WriteLine("obs is 'dead'?!"); sub.DoSomething(); //再次激发事件 //obs并没有死去,会再次响应事件 //输出 XX1 event raised! // CommonEvent event raised! //因此,obs并没有我们期待的那样结束了自己的生命期 Console.Read(); } }
被注释部分事件发布者与观察者之间属于弱关联,观察者能够正常死亡;未被注释部分事件发布者与观察者属于强关联,观察者不能正常死亡。
运行结果如下:
图3
图4
本文代码均已调试通过,环境(XP+.net 3.5)。
本文所有事件,均没有考虑“多线程”情况。
希望有帮助,O(∩_∩)O~
相关文章推荐
- .Net开发笔记(五) 关于事件
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- (转)【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- 【转】【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- 【Android2D游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- 15—关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- 关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的优化笔记!
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- .Net开发笔记(五) 关于事件
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- 【Android游戏开发之路二】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记! .