C# 事件的继承

来源:互联网 发布:把mac照片导入iphone 编辑:程序博客网 时间:2024/06/14 19:51

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);        }    }

 

 

原创粉丝点击