博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#中事件的继承
阅读量:6922 次
发布时间:2019-06-27

本文共 2022 字,大约阅读时间需要 6 分钟。

C#中的子类无法调用父类的事件,可以通过在父类中创建一个方法来调用父类的事件,而子类通过调用父类的方法来触发事件。

class parent{  protected string name;  public event Handle OnEvent;  protected SendEvent(HandleArgs args)  {    if (OnEvent != null)    {      OnEvent(this, args);    }  }}class clild : parent{  public clild()  {    name = "server1";  }  public void Start()  {    SendEvent(new HandleArgs(State.Start, name));  }}

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

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

基类:

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://vghcl.baihongyu.com/

你可能感兴趣的文章
搭理AD域控服务器
查看>>
FTP HA windows cluster
查看>>
BGP AS-PATH 正则表达式的理解
查看>>
【帧中继】EIGRP如何运行在帧中继网络
查看>>
赛门铁克NBU备份oracle慢的问题
查看>>
Linux下Socket 函数集(二)
查看>>
漫谈程序员系列:受刺激啦,开篇啦
查看>>
特效编辑器开发手记1——令人蛋疼菊紧的Cocos2d-x动态改变粒子数
查看>>
Java源码分析系列之ArrayList读后感
查看>>
安卓中的消息循环机制Handler及Looper详解
查看>>
练习命令
查看>>
转 fiddler常见的应用场景
查看>>
android开发学习 ------- 仿QQ侧滑效果的实现
查看>>
139.00.007 Git学习-Cheat Sheet
查看>>
js的基本数据类型有哪些?
查看>>
html 5 新增标签及简介
查看>>
c#多线程中Lock()关键字的用法小结
查看>>
征服恐惧!用 Vim 写 iOS App
查看>>
Struts_登录练习(配置拦截器)
查看>>
ASP.NET Core 2.0 使用支付宝PC网站支付
查看>>