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

  • 相关阅读:
    网格形变
    网格简化
    无法打开包括文件: “QWidget”: No such file or directory
    遇到一个 bug svg 抖动的解决方案
    echarts-gl 遇到一个错误 groupGL 未定义
    鼠标操控三维视角
    鼠标控制3维操作 不知道能不能获得一些灵感
    tensorflow 安装
    Codeforces Round #541 (Div. 2) B.Draw!
    Codeforces Round #541 (Div. 2) A.Sea Battle
  • 原文地址:https://www.cnblogs.com/farmer-y/p/7943799.html
Copyright © 2011-2022 走看看