编写高质量代码改善C#程序的157个建议——建议41:实现标准的事件模型
2015-08-15 20:36
603 查看
建议41:实现标准的事件模型
上一建议中,我们实现了一个带事件通知的文件传输类FileUploader。虽然已经满足需求,但却不符合C#的编码规范,查看EventHandler的原型声明:
我们应该知道微软为事件模型定义的几个规范:
委托类型的名称已EventHandler结束;
委托原型返回值为void;
委托原型具有两个参数:sender表示事件触发者,e表示事件参数;
事件参数的名称以EventArgs结束。
为了将FileUploader修改为符合C#的编程规范,首先需要提供一个FileUploadedEventArgs类来保存进度信息:
调用代码:
转自:《编写高质量代码改善C#程序的157个建议》陆敏技
上一建议中,我们实现了一个带事件通知的文件传输类FileUploader。虽然已经满足需求,但却不符合C#的编码规范,查看EventHandler的原型声明:
public delegate void EventHandler(object sender, EventArgs e);
我们应该知道微软为事件模型定义的几个规范:
委托类型的名称已EventHandler结束;
委托原型返回值为void;
委托原型具有两个参数:sender表示事件触发者,e表示事件参数;
事件参数的名称以EventArgs结束。
为了将FileUploader修改为符合C#的编程规范,首先需要提供一个FileUploadedEventArgs类来保存进度信息:
class FileUploadedEventArgs : EventArgs { public int FileProgress { get; set; } } 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); } } } }
调用代码:
static void Main(string[] args) { FileUploader f1=new FileUploader(); f1.FileUploaded += f1_FileUploaded; f1.Upload(); } static void f1_FileUploaded(object sender, FileUploadedEventArgs e) { Console.WriteLine(e.FileProgress); }
转自:《编写高质量代码改善C#程序的157个建议》陆敏技
相关文章推荐
- 编写高质量代码改善C#程序的157个建议——建议40:使用event关键字为委托施加保护
- 【C#】TreeView应用
- C# WebService URL重写
- [C#]6.0新特性浅谈
- C# RGB和HSB相互转换
- 编写高质量代码改善C#程序的157个建议——建议39:了解委托的实质
- C#垃圾回收机制详解
- 编写高质量代码改善C#程序的157个建议——建议38:小心闭包中的陷阱
- 编写高质量代码改善C#程序的157个建议——建议37:使用Lambda表达式代替方法和匿名方法
- C# 事件
- C# DataGridView分页显示
- C# 编程音量控制
- C#识别简单的验证码(中)
- C#实现判断一个时间点是否位于给定时间区间的方法
- C#中静态与非静态方法比较
- 编写高质量代码改善C#程序的157个建议——建议36:使用FCL中的委托声明
- 初入 CLR - 阅读《CLR via C#》笔记
- C#扫雷(9*9阉割版)
- 编写高质量代码改善C#程序的157个建议——建议35:使用default为泛型类型变量指定初始值
- 字符串公式解析器——使用“逆波兰式算法”及C#实现