我最近在Eric Lippert的ridiculously awesome博客上重新阅读了一些旧帖子并遇到了this tidbit:
C#中相当一部分关键字用于两个或更多 方式:固定,进入,部分,出,进入,新,委托,在哪里,使用, class,struct,true,false,base,this,event,return和void all 至少有两种不同的含义。
为了好玩,我的同事和我自己进行了测验,除了其中一个关键字之外,我能够提供至少两种用途。困扰我的是event
。
显然,在声明委托类型的成员字段时使用event
会将其转换为事件(例如,只显示添加/删除运算符)。什么是事件的其他含义?
编辑(答案):
感谢@Hans Passant,我从C# spec挖出了这个位,解释了事件的其他用法 - 作为事件属性的(默认)属性目标说明符(来自第17.2节): / p>
在省略事件的事件声明上指定的属性 访问器可以应用于正在声明的事件,也可以应用于关联的事件 field(如果事件不是抽象的),或者关联的add和 删除方法。如果没有 attribute-target-specifier ,则 属性适用于该事件。
event
的存在 attribute-target-specifier 表示该属性适用于 事件;field
attribute-target-specifier 的存在表示 该属性适用于该字段;和存在的method
attribute-target-specifier 表示该属性适用 方法。
答案 0 :(得分:6)
作为属性目标说明符。我想不出你有这么好的理由:
[AttributeUsage(AttributeTargets.Event)]
class MyAttribute : Attribute { }
class foo {
[event: MyAttribute]
public event EventHandler goo;
}
答案 1 :(得分:5)
使用 event
有两种方法,但我不确定这是否合格。
public event MyDelegate MyEvent;
public event MyDelegate MyEvent
{
add { ... }
remove { ... }
}
答案 2 :(得分:3)
从MSDN开始,使用事件的两种方式是:
[attributes] [modifiers] event type declarator;
[attributes] [modifiers] event type member-name {accessor-declarations};