C#'event'关键字的多重含义?

时间:2011-07-12 20:50:59

标签: c# events keyword

我最近在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 表示该属性适用   方法。

3 个答案:

答案 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};