标签:
C#的事件触发机制,类似于c++的回调函数机制
我先简单说一下,委托和事件的实质,后期再重开一篇博文来详细说
委托:指向方法的指针,类似于C的函数指针
事件:是一个可以存放0个或多个方法指针的数据结构 .......... 在一次编译后会为其生成一个类等等的就以后另开博文说了
看看触发机制
方便理解,来个通俗一点的图
事件触发源类
class cclass { private char i; public delegate void ichanged(cclass s); public event ichanged value_changed; protected virtual void onvaluechanged(cclass message_str)//在onxxxxxx方法中触发事件 { ichanged temp_value_changed = Volatile.Read(ref value_changed);//保持线程安全,保留一个备份 if (temp_value_changed != null) { temp_value_changed(message_str); } } public char I { get { return i; } set { if(value!=i) { i=value; this.onvaluechanged(this);//值修改时调用onxxxxxxx方法 } } } }
在另一个类中为事件注册方法,修改值时触发事件,执行方法
class Program { static void Main(string[] args) { cclass c = new cclass(); c.value_changed+=c_value_changed;//把方法注册到事件上, char i = Console.ReadKey().KeyChar; while(i!=13)//回车退出 { Console.WriteLine(); c.I = i;//值修改,事件被触发,执行注册到事件上的所有方法 i = Console.ReadKey().KeyChar; } } private static void c_value_changed(cclass s) { Console.WriteLine("value is changed>>>>i:"+s.I); } }
效果
源码连接:http://pan.baidu.com/s/1i3UXHKp
标签:
原文地址:http://www.cnblogs.com/magicianlyx/p/5187380.html