【发布时间】:2011-07-12 20:50:59
【问题描述】:
我最近在重读 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 节):
在省略事件的事件声明中指定的属性 访问器可以应用于被声明的事件,关联的 字段(如果事件不是抽象的),或关联的添加和 删除方法。在没有 attribute-target-specifier 的情况下, 属性适用于事件。
event的存在 attribute-target-specifier 表示该属性适用于 事件;fieldattribute-target-specifier 的存在表明 该属性适用于该字段;和存在的methodattribute-target-specifier 表示该属性适用 到方法。
【问题讨论】:
-
请链接到确切的文章,而不是整个博客。
-
任何代表委托的函数都被认为是一个事件。例如,按钮单击是一个事件。您还可以有一个自定义事件。像用户/自定义控件有一个自定义事件
-
@George:这是一个关于编程语言中的关键字的问题。对我来说听起来很切题。 @Henk Holterman:完成。
-
"member field" - 好吧,从技术上讲,它不是一个字段...它是一个
event;p 类字段事件(包括实现)和事件(仅 API 签名)计数? -
在不安全的代码中,void * 是一个“无类型”指针,而方法上的“void”关键字意味着没有返回值。