在上一个建议中,我们实现了一个带事件通知的文件传输类FileUploader。虽然已经满足需求,但却不符合C#的编码规范,查看EventHandler的原型声明:
public delegate void EventHandler(object sender,EventArgs e);
我们应该知道微软为事件模型设定的几个规范:
❑委托类型的名称以EventHandler结束;
❑委托原型返回值为void;
❑委托原型具有两个参数:sender表示事件触发者,e表示事件参数;
❑事件参数的名称以EventArgs结束。
为了将FileUploader修改得符合C#的编码规范,首先需要提供一个FileUploadedEvnetArgs类来保存进度信息:
class FileUploadedEventArgs:EventArgs
{
public int FileProgress{get;set;}
}
而对FileUploader类型也相应做出修改,如下:
class FileUploader
{
public event EventHandler<FileUploadedEventArgs>FileUploaded;
public void Upload()
{
FileUploadedEventArgs e=new
FileUploadedEventArgs(){FileProgress=100};
while(e.FileProgress>0)
{
//传输代码,省略
e.FileProgress--;
if(FileUploaded!=null)
{
FileUploaded(this,e);
}
}
}
}
最终,调用者的代码看起来应该像下面这样:
class Program
{
static void Main(string[]args)
{
FileUploader fl=new FileUploader();
fl.FileUploaded+=Progress;
fl.Upload();
}
static void Progress(object sender,FileUploadedEventArgs e)
{
Console.WriteLine(e.FileProgress);
}
}