委托本身是一种引用类型,它保存的也是托管堆中对象的引用,只不过这个引用比较特殊,他是对方法的引用。事件本身也是委托,他是委托组,C#中提供了关键字event来对事件进行特别区分的。
一、了解委托的实质:
1.委托是方法指针
2.委托是一个类,当对其进行实例化的时候,要将引用方法作为它的构造方法的参数
示例:设计一个点对点文件传输,有以下几个基本功能:
1.传输文件
2.按照百分制通知传输进度
3.传输类能同时被控制台应用程序和Winform应用程序使用
分析:由于要让通知本身能被控制台应用程序和Winform应用程序使用,因此设计的这个文件传输类在进行通知时,就不能显示地调用;
Console.WriteLine("当前进度:"+fileProgress);
理想的情况是,在需要通知的地方,全部将器置换成一个方法的指针,有调用者来决定该方法完成什么功能。这个方法指针在C#中被理解成委托。可以声明:
public delegate void FileUploadedHandler(int progress)
这个类最终形式:
class FileUploader { public delegate void FileUploadedHandler(int progress); public FileUploadedHandler FileUploaded; public void Upload() { int fileProgress = 100; while (fileProgress > 0) { //传输代码,略 fileProgress--; if (FileUploaded != null) { FileUploaded(fileProgress); } } } }