Зачем использовать события где-то, где достаточно метода? - PullRequest
2 голосов
/ 23 февраля 2011

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

class Bulb

{ public delegate void handler();
  public event handler Glowing;
 ...
  Glowing+=SomeMethod;
  private void TurnOn
  {
    Glowing();
  }

  private void SomeMethod
  {
  }

}

Ответы [ 3 ]

4 голосов
/ 23 февраля 2011

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

Простой вызов вашего метода никому не скажет , что что-то произошло.

События являются базовым элементом любого программирования, управляемого событиями

Если вашей программе не нужно сообщать о событии, вам не нужно реализовывать такую ​​функциональность. Однако наличие такой функциональности имеет свои преимущества.


Например, при использовании List класса, о котором вы не знаете, когда в него был добавлен Предмет (если в какой-то момент это делает какой-то другой код), но в ObservableCollection вы получаете уведомления при добавлении или удалении элементов.


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

2 голосов
/ 23 февраля 2011

Методы обработки событий становятся полезными, когда у вас есть зависимость от класса, которая должна знать или получать уведомление об изменении состояния:

public class Lamp
{
    Bulb inThelamp = new Bulb();
    inTheLamp.Glowing += myLampMethod;

    // If these arguments have been defined for this event that is
    public void myLampMethod(object sender, EventArgs e) 
    {
        // Code to react to the light suddenly being on
    }
}

Это позволяет классу Lamp распознавать, что что-то включило лампочку.Во многих случаях это будет происходить через действие в Лампе (щелчок, ручка и т. Д.).Но в некоторых случаях это может быть внешний класс, который вызывает публичное свойство Bulb напрямую, без использования самой лампы (например, if(PowerCompany.BillsPaid) Lamp.BulbInTheLamp.TurnedOn();).Все это при условии, что модификаторы настроены на такой доступ.

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

2 голосов
/ 23 февраля 2011

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

Таким образом, преимущество заключается не в простом классе, а в том, что классы / объекты будут содержать / использовать экземпляры класса Bulb.

Надеюсь, это имело какой-то смысл:)

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