编写高质量代码改善C#程序的157个建议——建议41:实现标准的事件模型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编写高质量代码改善C#程序的157个建议——建议41:实现标准的事件模型相关的知识,希望对你有一定的参考价值。

 

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

上一建议中,我们实现了一个带事件通知的文件传输类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个建议——建议41:实现标准的事件模型的主要内容,如果未能解决你的问题,请参考以下文章

编写高质量代码改善C#程序的157个建议——建议141:不知道该不该用大括号时,就用

编写高质量代码改善C#程序的157个建议——建议55:利用定制特性减少可序列化的字段

编写高质量代码改善C#程序的157个建议——建议52:及时释放资源

编写高质量代码改善C#程序的157个建议——建议41:实现标准的事件模型

编写高质量代码改善C#程序的157个建议——建议111:避免双向耦合

编写高质量代码改善C#程序的157个建议——建议8: 避免给枚举类型的元素提供显式的值