5

当我尝试运行以下代码时出现 CS0079 编译错误:

public delegate void MyClassEHandler(MyClassEParam param);

public class MyClassE
{
    public static event MyClassEHandler Error
    {
         add
         {
              MyClassE.Error = (MyClassEHandler)Delegate.Combine(MyClassE.Error, value);
         } 
    }
}

错误:

CS0079 : 事件MyClassE.Error只能出现在 += 或 -= 的左侧

搜索了一圈,但无法弄清楚如何解决它。

添加: if (MyClass.Error != null) 或 MyClass.Error(null, null);

得到相同的 CS0079 错误。

CS0079 : 事件MyClassE.Error只能出现在 += 或 -= 的左侧

谁可以帮我这个事?

4

2 回答 2

6

您不能设置事件,您可以在其上添加或删除处理程序。所以,正如错误所说,你应该这样做:

public delegate void MyClassEHandler(MyClassEParam param);

public static event MyClassEHandler Error
{
     add
     {
          MyClassE.Error += value;
     } 
     remove         
     {
          MyClassE.Error -= value;
     } 
}

Delegate.Combine会为你神奇地工作。

于 2012-12-20T14:14:29.133 回答
2

试试这个

public delegate void MyClassEHandler(MyClassEParam param);  
static MyClassEHandler error;

public static event MyClassEHandler Error
{
 add
 {
      MyClassE.error += (MyClassEHandler)Delegate.Combine(MyClassE.Error, value);
 } 

 remove
 {
      MyClassE.Error -= (MyClassEHandler)Delegate.Combine(MyClassE.Error, value);
 } 

}

参考c#事件和委托的拦截添加删除

于 2012-12-20T14:15:40.457 回答