C#CS0079事件处理编译错误

Chr*_*ris 3 .net c# events compiler-errors

我无法编译以下代码.

编译错误CS0079:事件'CustomEvent'只能出现在+ =或 - =的左侧

if (CustomEvent != null)   //CS0079
    CustomEvent(null, null);  //CS0079
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

我的实现是这样的:

public delegate void EventHandler(object sender, EventArgs e);  
public static event EventHandler CustomEvent
{
    add    { CustomEvent += value; }
    remove { CustomEvent -= value; }
 }
private static void Func()
{
    if (CustomEvent != null)      //CS0079
        CustomEvent(null, null);  //CS0079
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 5

您的编辑显示递归调用:您正在声明自定义事件,这意味着要提供支持字段; 例如:

private static EventHandler customEvent;
public static event EventHandler CustomEvent
{
    add    { customEvent += value; }
    remove { customEvent -= value; }
 }
private static void Func()
{
    var tmp = customEvent;
    if (tmp != null) tmp(null, null);
}
Run Code Online (Sandbox Code Playgroud)

请注意,Func我指的是field(customEvent),而不是event(CustomEvent).

但是,这更简单(线程安全)作为类似字段的事件:

public static event EventHandler CustomEvent;
private static void Func()
{
    var tmp = CustomEvent;
    if (tmp != null) tmp(null, null);
}
Run Code Online (Sandbox Code Playgroud)

类似字段的事件使用event关键字,但省略了访问者:编译器为您添加了许多样板(支持字段和线程安全的添加/删除实现).此外,它允许通过事件名称(来自声明类型)访问备份文件,因此该行如何var tmp = CustomEvent;工作.

另外:对静态事件要非常小心; 它们是意外保持大量物体存活的好方法.