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