Как я могу написать адаптивный метод для правильного использования моей библиотеки? - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть библиотека, и есть одна проблема с логикой в ​​моей программе. Если вы можете мне помочь - я скажу вам: «Спасибо». действительно большое спасибо. Код:

 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);
    }

Вопрос такой: Мои занятия - это библиотека. Как я могу создать адаптивный метод (Получить), который пользователь может использовать для вывода информации, где он хочет (регистратор, консоль, файл e.t.c). я должен использовать виртуальные методы? Или создать интерфейс? Или как я могу связать это с событиями? Я знаю, как использовать события, если мы говорим о типичной ситуации. Спасибо вам за помощь. И, опять же, простите за мой плохой английский.

1 Ответ

0 голосов
/ 09 сентября 2018

Вы можете использовать другой подход для достижения этой цели. Приведенный ниже код показывает, как определить интерфейс и использовать его:

 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();
     }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...