这几天开始做Silverlight项目,所以自然而然就开始解除到C#了,首先遇到的就是Delegate和Event;看着各种UI类中的Delegate和Event就略感不爽,因为我对他们不太理解,于是花费了几分钟总结一下,梳理一下思绪。
delegate:用delegate定义的类型类似C函数指针类型
例如:
typedef int (* Type_Add)(int x,inty);
public delegate int DlgtAdd(int x,int x);
我认为它们基本上等价,不过使用方法略微不一样。
C# 中的委托,你可以在一个委托变量中,添加多个函数;
DlgtAdd add=new DlgtAdd(FunName1);
add+=new DlgtAdd(FunName2);
add();
当Delegate add被调用的时候,上面两个函数都会被执行。
我个人认为事件只不过是把委托的定义规范了一下,并且把委托变量的调用被隐藏了,由系统调用:
public delegate void DownloadProgressChangedEventHandler(object sender, DownloadProgressChangedEventArgs e);//一个委托
public event DownloadProgressChangedEventHandler DownloadProgressChanged;//一个时间
在某个时刻DownloadProgressChanged函数将被调用。