Какие варианты использования существуют для нестатических частных или защищенных событий?

Java имеет хороший: Semantic Diff Utilities

14
задан Reed Copsey 25 September 2009 в 20:33
поделиться

4 ответа

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

Изменить:

Позвольте мне привести пример ...

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

6
ответ дан 1 December 2019 в 14:22
поделиться

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

Чтобы решить эту проблему, сгенерированная машиной половина могла стрелять на частном мероприятии. Если пользовательская половина заботится о ней, она может подписаться на событие. В противном случае он может проигнорировать его.

Этот сценарий теперь более элегантно рассматривается с помощью частичных методов в C # 3,

7
ответ дан 1 December 2019 в 14:22
поделиться

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

1
ответ дан 1 December 2019 в 14:22
поделиться

Извините, что перетащил старую ветку, но я безнаказанно использую частные мероприятия в одном из моих проектов, и лично я считаю, что это хороший способ решить проблему дизайна:

Вот сокращенный код:

public class MyClass
{
  private event EventHandler _myEvent;

  public ExternalObject { get; set; }

  public event EventHandler MyEvent
  {
    add
    {
      if (_myEvent.GetInvocationList().Length == 0 && value != null)
        ExternalObject.ExternalEvent += HandleEvent;
      _myEvent+= value;
    }
    remove
    {
      _myEvent-= value;
      if (_myEvent.GetInvocationList().Length == 0)
        ExternalObject.ExternalEvent -= HandleEvent;
    }
  }

  private void HandleEvent(object sender, EventArgs e)
  {
     _myEvent.Raise(this, EventArgs.Empty); // raises the event.
  }
}

По сути, MyEvent всегда вызывается только в обработчике событий ExternalObject.ExternalEvent , поэтому, если нет обработчиков для MyEvent ], то мне не нужно прикреплять обработчик к внешнему событию, что немного ускоряет код за счет сохранения кадра стека.

0
ответ дан 1 December 2019 в 14:22
поделиться