zoukankan      html  css  js  c++  java
  • C# 事件的继承

    有下面一段代码,目的是实现事件的继承:
    基类:

        public class BaseBusiness
        {
            //声明事件委托
            public delegate void ProgressEventHandler(int progress, string msg);
            
    //声明事件
            public event ProgressEventHandler ProgressEvent;
        }

    派生类:
        public class MyBusiness : BaseBusiness
        {
            public MyBusiness()
            {
                
    this.ProgressEvent(30,"Testing...");
            }
        }

    编译时提示如下错误:   
    事件“BaseBusiness.ProgressEvent”只能出现在 += 或 -= 的左边(从类型“BaseBusiness”中使用时除外) 

    出现编译错误的原因是:
    事件只能从声明它们的类中调用,派生类不能直接调用在基类声明的事件。

    要处理基类的事件,通常通过在基类中为事件创建受保护虚方法(OnEventName)来实现。派生类可以重写基类的OnEventName方法,也可以直接调用基类的OnEventName方法,从而实现调用基类的事件。重写基类的OnEventName方法,派生类可以截获基类正在调用的事件,对这些事件执行它自己的处理。

    修改后的代码如下:
    基类:

        public class BaseBusiness
        {
            //声明事件委托
            public delegate void ProgressEventHandler(int progress, string msg);
            
    //声明事件
            public event ProgressEventHandler ProgressEvent;

            protected virtual void OnProgress(int progress, string msg)
            {
                
    if (this.ProgressEvent != null)
                    
    this.ProgressEvent(progress, msg);
            }

        }

    派生类:
        public class MyBusiness : BaseBusiness
        {
            public MyBusiness()
            {
                //  可以直接调用基类的方法
                this.OnProgress(this.OnProgressValue, "Testing...");            
            }

            //  可以重写基类的方法
            protected override void OnProgress(int progress, string msg)
            {
                
    // 在这里添加其他处理代码
                base.OnProgress(progress, msg);
            }

        }

    本文地址:http://www.cnblogs.com/anjou/archive/2007/06/19/788987.html
  • 相关阅读:
    LeetCode数学系列(1)——第172解题思路
    python的匿名函数lambda解释及用法
    LeetCode位操作系列(2)——位运算的常用技巧:lowbit运算,包含lowbit公式、讲解、231题运用
    【零散】jupyter notebook快捷键 mac版
    【油猴插件】分享推荐
    【Mac】 Chromedriver 存放路径
    【全网首发】微信公众号常见垃圾文章广告软文关键词整理
    Mac Chrome浏览器取消自动升级(最新版)
    requests与selenium之前cookies传递
    [转]scrapy中的request.meta
  • 原文地址:https://www.cnblogs.com/anjou/p/788987.html
Copyright © 2011-2022 走看看