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)
您的编辑显示递归调用:您正在声明自定义事件,这意味着您要提供支持字段; 例如:
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;工作.
另外:对静态事件要非常小心; 它们是意外保持大量物体存活的好方法.
| 归档时间: |
|
| 查看次数: |
2680 次 |
| 最近记录: |