zoukankan      html  css  js  c++  java
  • 编写高质量代码改善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个建议》陆敏技

  • 相关阅读:
    zoj 1649 Rescue
    poj 1659 Frogs' Neighborhood
    hdu 1385 Minimum Transport Cost
    hdu 2680 Choose the best route
    写了一下午的dijkstra。突然发现我写的根本不是dijkstra。。。。是没优化过的BFS.......
    hdu 1548 A strange lift
    hdu 2066 一个人的旅行
    hdu 2544 最短路
    洛谷 P3253 [JLOI2013]删除物品 解题报告
    洛谷 P10P1343 地震逃生 改错
  • 原文地址:https://www.cnblogs.com/jesselzj/p/4733055.html
Copyright © 2011-2022 走看看