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

  • 相关阅读:
    C#中RDLC合并两个列的值
    C#中RDLC控制某列的显示隐藏
    VS中RDLC提示类型不一致
    C#中使用NPOI提示(找到的程序集清单定义与程序集引用不匹配)
    Web项目访问在C盘的图片(不在当前项目路径下的图片)
    【转】主成分分析(PCA)
    【转】协方差的意义
    [转]hpp.h与.h的区别
    SPEC-RFC3261总述
    (转载)VoLTE简介
  • 原文地址:https://www.cnblogs.com/farmer-y/p/7943799.html
Copyright © 2011-2022 走看看