Множественные значения ключевого слова «событие» в C #? - PullRequest
12 голосов
/ 13 июля 2011

Я недавно перечитывал некоторые старые посты в блоге Эрика Липперта смехотворно удивительно и наткнулся на этот кусок :

Значительная часть ключевых слов C # используется в двух или более способы: фиксированный, в, частичный, из, в, новый, делегировать, где, используя, класс, структура, истина, ложь, база, это, событие, возврат и аннулирование всех имеют как минимум два разных значения.

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

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

РЕДАКТИРОВАТЬ (Ответ):

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

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

Ответы [ 3 ]

6 голосов
/ 13 июля 2011

Как указатель цели атрибута.Я не могу придумать вескую причину, по которой ты сделал бы это:

[AttributeUsage(AttributeTargets.Event)]
class MyAttribute : Attribute { }

class foo {
    [event: MyAttribute]
    public event EventHandler goo;
}
5 голосов
/ 13 июля 2011

Есть два способа использовать event, но я не уверен, что это подходит.

public event MyDelegate MyEvent;

public event MyDelegate MyEvent
{
    add { ... }
    remove { ... }
}
3 голосов
/ 13 июля 2011

С MSDN , два способа использования события:

[attributes] [modifiers] event type declarator;

[attributes] [modifiers] event type member-name {accessor-declarations};

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...