购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

建议41:实现标准的事件模型

在上一个建议中,我们实现了一个带事件通知的文件传输类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);

}

} 68ZT5pj6bBO4tqy8oH35QmEpjUVHCYcr/U5+tCaliD3V4L4XUQtTvL0Ngbmao026


点击中间区域
呼出菜单
上一章
目录
下一章
×

打开