C# 如何编写自适应方法以正确使用库?

C# 如何编写自适应方法以正确使用库?,c#,events,dining-philosopher,C#,Events,Dining Philosopher,我有一个库,程序中的逻辑有一个问题。如果你能帮助我,我会对你说:“谢谢”。非常感谢。 代码: 问题是:我的班级是一个图书馆。我如何创建一个自适应方法(Receive),用户可以使用它在任何地方输出信息(记录器、控制台、文件e.t.c)。 我应该使用虚拟方法吗?还是创建一个接口?或者我如何将其与事件绑定?如果我们讨论典型情况,我知道如何使用事件。 谢谢你的帮助。 再一次为我糟糕的英语道歉。你可以使用不同的方法来实现这一点。 下面的代码显示了如何定义和使用接口: public interface

我有一个库,程序中的逻辑有一个问题。如果你能帮助我,我会对你说:“谢谢”。非常感谢。 代码:

问题是:我的班级是一个图书馆。我如何创建一个自适应方法(Receive),用户可以使用它在任何地方输出信息(记录器、控制台、文件e.t.c)。 我应该使用虚拟方法吗?还是创建一个接口?或者我如何将其与事件绑定?如果我们讨论典型情况,我知道如何使用事件。 谢谢你的帮助。
再一次为我糟糕的英语道歉。

你可以使用不同的方法来实现这一点。 下面的代码显示了如何定义和使用接口:

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

听起来像是一个依赖注入的工作質問はちょっと分かりにくい。。@凯伦:我们都喜欢这里的英语,不需要对答案说谢谢。如果答案有用并解决了问题,只需将其标记为答案即可。祝你好运。如果这是正确的解决方案,请按绿色勾号,这样每个人都可以从@TetsuaKeito中受益
        Thread.Sleep(rng.Next(1000) + 1);
        Status = "thinking";
        reportObject.ReceiveMessage(Name + " is " + Status);
        Thread.Sleep(rng.Next(1000) + 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();
     }
 }