Несколько значений ключевого слова С# 'event?
Недавно я перечитывал несколько старых сообщений на Eric Lippert смешно удивительный блог и наткнулся на этот лакомый кусочек:
Значительная часть ключевых слов С# используется в двух или более способы: фиксированные, в, частичные, вне, в, новые, делегировать, где, используя, class, struct, true, false, base, this, event, return и void all имеют как минимум два разных значения.
Просто для удовольствия мои коллеги, и я спросил себя, и я смог придумать хотя бы два использования для всех, кроме одного из этих ключевых слов. То, что меня тошнило, event
.
Очевидно, что использование event
при объявлении поля члена типа делегата превращает его в событие (например, отображаются только операторы добавления/удаления). Что означает другое значение события?
ИЗМЕНИТЬ (ОТВЕТ):
Благодаря @Hans Passant я выкопал этот бит из С# spec, который объясняет другое использование события - как (по умолчанию ) спецификатор атрибута атрибута для атрибутов события (из раздела 17.2):
Атрибут, указанный в объявлении события, который опускает событие аксессоры могут применяться к объявляемому событию, к связанным (если событие не является абстрактным) или связанным с ним добавлением и удалить методы. В отсутствие атрибута-целевого-спецификатора атрибут применяется к событию. Наличие event
attribute-target-specifier указывает, что атрибут применяется к мероприятие; наличие спецификатора атрибута field
указывает что атрибут применяется к полю; и наличие method
attribute-target-specifier указывает, что атрибут применяется к методам.
Ответы
Ответ 1
Как спецификатор назначения атрибута. Я не могу придумать, по какой причине вы это сделаете:
[AttributeUsage(AttributeTargets.Event)]
class MyAttribute : Attribute { }
class foo {
[event: MyAttribute]
public event EventHandler goo;
}
Ответ 2
Существует два способа использования event
, но я не уверен, соответствует ли это.
public event MyDelegate MyEvent;
public event MyDelegate MyEvent
{
add { ... }
remove { ... }
}
Ответ 3
Из MSDN два способа использования события:
[attributes] [modifiers] event type declarator;
[attributes] [modifiers] event type member-name {accessor-declarations};