Подтвердить что ты не робот

Несколько значений ключевого слова С# 'event?

Недавно я перечитывал несколько старых сообщений на Eric Lippert смешно удивительный блог и наткнулся на этот лакомый кусочек:

Значительная часть ключевых слов С# используется в двух или более способы: фиксированные, в, частичные, вне, в, новые, делегировать, где, используя, class, struct, true, false, base, this, event, return и void all имеют как минимум два разных значения.

Просто для удовольствия мои коллеги, и я спросил себя, и я смог придумать хотя бы два использования для всех, кроме одного из этих ключевых слов. То, что меня тошнило, event.

Очевидно, что использование event при объявлении поля члена типа делегата превращает его в событие (например, отображаются только операторы добавления/удаления). Что означает другое значение события?

ИЗМЕНИТЬ (ОТВЕТ):

Благодаря @Hans Passant я выкопал этот бит из С# spec, который объясняет другое использование события - как (по умолчанию ) спецификатор атрибута атрибута для атрибутов события (из раздела 17.2):

Атрибут, указанный в объявлении события, который опускает событие аксессоры могут применяться к объявляемому событию, к связанным (если событие не является абстрактным) или связанным с ним добавлением и удалить методы. В отсутствие атрибута-целевого-спецификатора атрибут применяется к событию. Наличие eventattribute-target-specifier указывает, что атрибут применяется к мероприятие; наличие спецификатора атрибута field указывает что атрибут применяется к полю; и наличие method attribute-target-specifier указывает, что атрибут применяется к методам.

4b9b3361

Ответ 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};