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个建议》陆敏技

  • 相关阅读:
    spring下配置shiro
    web.xml文件配置说明
    spring中配置缓存—ehcache
    applicationContext.xml配置简介
    spring task定时器的配置使用
    spring配置数据库连接池druid
    Mybatis使用pageHelper步骤
    mybatis-generator和TKmybatis的结合使用
    PHP删除一个目录下的所有文件,不删除文件夹
    nodejs学习
  • 原文地址:https://www.cnblogs.com/farmer-y/p/7943799.html
Copyright © 2011-2022 走看看