A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© mustek 中级黑马   /  2013-4-15 20:28  /  1475 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

基类:
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“中使用时除外)。

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

2 个回复

倒序浏览
首先  你这个问题出现在事件只能在它声明的类中调用,要想在派生类中调用基类的事件,要在基类中为事件创建方法!
  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)  //判断事件是否已经注册了
    {

    }
}
回复 使用道具 举报
1. 若要向委托的方法列表(调用列表)中添加额外的方法,只需使用加法运算符或加法赋值运算符(“+”或“+=”)添加两个委托;
2. 若要从调用列表中移除方法,请使用减法运算符或减法赋值运算符(“-”或“-=”).
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马