Как я могу написать адаптивный метод для правильного использования моей библиотеки?
У меня есть библиотека и есть одна проблема с логикой в моей программе. Если вы можете мне помочь - я скажу вам: "Спасибо" . действительно большое спасибо. Код:
public class Report
{
/// <summary>
/// An empty constructor, just instantiates the object.
/// </summary>
public Report()
{
}
/// <summary>
/// A method that receives a message from another object,
/// and prints it out to the Console.
/// </summary>
/// <param name="message">The message to be printed.</param>
public void ReceiveMessage(String message)
{
Console.WriteLine(message);
}
}
private Report reportObject;
public void EnterThinkingState () {
Thread.Sleep(rng.Next(1000) + 1);
Status = "thinking";
reportObject.ReceiveMessage(Name + " is " + Status);
Thread.Sleep(rng.Next(1000) + 1);
}
Вопрос такой: Мои занятия - это библиотека. Как я могу создать адаптивный метод (Получить), который пользователь может использовать для вывода информации, где он хочет (регистратор, консоль, файл и т. Д.). я должен использовать виртуальные методы? Или создать интерфейс? Или как я могу связать это с событиями? Я знаю, как использовать события, если мы говорим о типичной ситуации. Спасибо вам за помощь. И, опять же, извините за мой плохой английский.
1 ответ
Вы можете использовать другой подход для достижения этой цели. Код ниже показывает, как определить интерфейс и использовать его:
public interface IReceiverBase
{
void ReceiveMessage(string message);
}
public class Report
{
private readonly IReceiverBase _iReceiverBase;
public Report(IReceiverBase iReceiverBase)
{
_iReceiverBase = iReceiverBase;
}
public void DoSomething()
{
// Do something here
_iReceiverBase.ReceiveMessage("Something done ...");
}
}
public class ConsoleMessageReceiver : IReceiverBase
{
public void ReceiveMessage(string message)
{
Console.WriteLine(message);
}
}
public class DebugMessageReceiver : IReceiverBase
{
public void ReceiveMessage(string message)
{
Debug.WriteLine(message);
}
}
class Program
{
static void Main(string[] args)
{
var repConsole = new Report(new ConsoleMessageReceiver());
repConsole.DoSomething();
var repDebug = new Report(new DebugMessageReceiver());
repDebug.DoSomething();
Console.Read();
}
}