Я хочу предоставить объектам в библиотеке классов возможность «выводить» сообщения, не беспокоясь о том, как они выводятся. Библиотеку классов можно использовать в консольном приложении, приложении 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; };
}