Подписка на события C # - PullRequest
       17

Подписка на события C #

1 голос
/ 24 февраля 2009

В C # в чем преимущество

public class blah
{

       public event EventHandler Blahevent;

}

против

public class blah
{

      private event EventHandler blahevent;

      public event EventHandler Blahevent
      {
          add
              {
                  blahevent+=value;
              } 
              remove
              {
                  blahevent-=value
              }
      }

}

или наоборот.

открывает ли первый из вас блаженство.

Ответы [ 4 ]

2 голосов
/ 24 февраля 2009

Нет явного преимущества в явной реализации методов добавления / удаления, если вы не хотите делать что-то другое. Возможные причины:

  • Возможно, взять контроль над кодом поддержки события самостоятельно (чтобы напрямую ссылаться на какое-то другое событие, а не идти через бессмысленный каскад, например)
  • сделать что-то еще в добавлении или удалении
  • Изменение требований безопасности при добавлении или удалении
  • выставить нижележащий делегат

Реализация по умолчанию поддерживает частное скрытое поле делегата, которое заменяется при каждом добавлении или удалении делегата. В большинстве случаев нет необходимости делать что-либо из перечисленного, но есть гибкость.

1 голос
/ 25 февраля 2009

Вы можете установить точку останова для последнего в целях отладки. Иногда это может быть действительно полезным (хотя после отладки я переключаю его на прежний).

1 голос
/ 24 февраля 2009

Вы можете исключить делегата из сериализации, используя атрибут [field: NonSerialized ()] в закрытом поле.

1 голос
/ 24 февраля 2009

Второй вариант имеет возможность точно контролировать, что происходит, когда указанное событие подписано или отписано, если существует специальная логика, которая должна выполняться в дополнение к добавлению или удалению указателя.

...