• 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
  • 相关阅读:
    day16_包(Package)丶API丶JavaBean
    day12_类中成员之方法
    day18_面向对象的三大特征之多态
    day14_面向对象的三大特征之继承
    react记录
    如何使用Houdini进行程序化优化?
    程序员健康指南
    uniapp 自定义导航
    uniapp :uviewui
    markdown
  • 原文地址:https://www.cnblogs.com/anjou/p/788987.html
Copyright © 2020-2023  润新知