黑马程序员技术交流社区

标题: 实现事件的继承报错求解! [打印本页]

作者: mustek    时间: 2013-4-15 20:28
标题: 实现事件的继承报错求解!
基类:
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“中使用时除外)。

作者: HM朱百青    时间: 2013-4-15 22:38
首先  你这个问题出现在事件只能在它声明的类中调用,要想在派生类中调用基类的事件,要在基类中为事件创建方法!
  1. public class BaseBusiness
  2. {
  3.    // 声明事件委托
  4.   public delegate void ProgressEventHandler(int progress,string msg);
  5. //声明事件
  6. public event ProgressEventHandler ProgressEvent;
  7. //为事件声明方法
  8. public void OnProgressEvent(int p, string m)
  9. {

  10. }

  11. }
  12. //派生类:
  13. public class MyBusiness :BaseBusiness
  14. {
  15.   public MyBusiness()
  16. {
  17.     this.OnProgressEvent(30, "Testing....");
  18. }
  19. }
复制代码
当然你的派生类想要有自己的事件  你可以将父类的事件方法声明为virtual的,访问修饰符最好是遗传保护的,用protected,然后在派生类中重写就可以了!
对了  我这段代码还没有写全,一般在调用事件的时候,你需要判断一下,事件是否注册了!就是在事件的方法里面判断一下
protected virtual void OnProgressEvent(int p, string m)
{
  if (ProgressEvent != null)  //判断事件是否已经注册了
    {

    }
}
作者: 许庭洲    时间: 2013-4-15 22:46
1. 若要向委托的方法列表(调用列表)中添加额外的方法,只需使用加法运算符或加法赋值运算符(“+”或“+=”)添加两个委托;
2. 若要从调用列表中移除方法,请使用减法运算符或减法赋值运算符(“-”或“-=”).




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2