Что использовать? делегат, событие или Func ?

Я хочу предоставить объектам в библиотеке классов возможность «выводить» сообщения, не беспокоясь о том, как они выводятся. Библиотеку классов можно использовать в консольном приложении, приложении Windows WinForm или WPF или на веб-странице.

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

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

Интерфейс:

namespace Test
{
  using System;
  using System.Xml.Linq;

  public interface IAction
  {
    DisplayMessageDelegate DisplayMessage(string message);
    void Execute();
    XElement Serialize(XName elementName);
  }

  public delegate void DisplayMessageDelegate(string message);
}

Оттуда я не уверен, как реализовать это поведение: (Кстати, я знаю, что этот код не будет компилироваться ...)

public class ActionClass1 : IAction
{
  // Other methods not shown...
  void Execute()
  {
    if (this.DisplayMessage != null)
    {
      this.DisplayMessage(“Hello”);
    }
  }
}

public class ConsoleClass
{
  ActionClass1 class1 = new ActionClass1();
  class1.DisplayMessage = { x =>  Console.WriteLine(x); };
}

public class WinFormClass
{
  ActionClass1 class1 = new ActionClass1();
  Class1.DisplayMessage = {x => DisplayTextBox.Text = x; };
}
7
задан Julian Easterling 8 April 2011 в 21:24
поделиться