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

Практическое использование интерфейсных событий

Каков хороший пример мощности событий интерфейса (объявление событий внутри интерфейса)?

В большинстве случаев я видел только публичные абстрактные методы внутри интерфейса.

4b9b3361

Ответ 1

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

Вот мой интерфейс.

public interface ISerialPortWatcher
{
    event EventHandler<ReceivedDataEventArgs> ReceivedData;
    event EventHandler StartedListening;
    event EventHandler StoppedListening;

    SerialPortSettings PortOptions { set; }

    bool Listening { get; set; }
    void Stop();
    void Start();
}

public class ReceivedDataEventArgs : EventArgs
{
    public ReceivedDataEventArgs(string data)
    {
        Data = data;
    }
    public string Data { get; private set; }
}

Ответ 2

Прекрасным примером в рамках .NET является INotifyPropertyChanged. Этот интерфейс состоит только из одного элемента: PropertyChanged событие.

В WPF вы можете указать, что элемент управления отобразит определенное свойство экземпляра объекта. Но как этот контроль будет обновляться, если изменяется базовое свойство?

Если связанный объект реализует интерфейс INotifyPropertyChanged, среда WPF может просто прослушивать PropertyChanged и обновлять соответствующим образом.

Ответ 3

вот один пример

public interface IMainAppWindow
{
   event EventHandler Closed;
}

// version 1 main window
public MainForm : Form , IMainAppWindow
{

}

// version 2 main window
public MainWindow : Window , IMainAppWindow
{
  event EventHandler Closed;

  public void OnClosed(object sender,RoutedEventArgs e)
  {
    if(Closed != null)
    {
      Closed(this,e);
    }
  }
}

В одном из моих приложений у меня есть такой код. Приложение было написано в winforms, а затем обновлено до WPF.

Ответ 4

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

public interface IInterface {
    event EventHandler QuestionAsked;
}

public class Class : IInterface {
    event EventHandler QuestionAsked;

    //As with typical events you might want an protected OnQuestionAsked
}

Ответ 6

Классическим сценарием является шаблон MVP с пассивным представлением. Форма реализует представление inteface, которое имеет событие NameChanged. Ведущий, создающий/использующий представление, подписывается на это событие. Когда текст имени в текстовом поле изменен, загорается это событие. Затем ведущий уведомляется. Поскольку ведущий знает о событии из интерфейса просмотра, вы можете предоставить макет для тестирования. Вид полностью отделен от ведущего.