fork download
  1. using System;
  2.  
  3. namespace LoggerTest
  4. {
  5. class Program
  6. {
  7. static void Main(string[] args)
  8. {
  9. var typeA = new Logger(() => new WriterTypeA());
  10. var typeB = new Logger(() => new WriterTypeB());
  11.  
  12. typeA.Write("test1");
  13. typeB.Write("test2");
  14. Console.WriteLine("何かキーを押してください。");
  15. Console.ReadKey();
  16. }
  17.  
  18. public class Logger
  19. {
  20. private Func<IWriter> _cWriter;
  21.  
  22. public Logger(Func<IWriter> cWriter)
  23. {
  24. this._cWriter = cWriter;
  25. }
  26.  
  27. public void Write(string s)
  28. {
  29. using (var writer = this._cWriter())
  30. {
  31. writer.Write(s);
  32. }
  33. }
  34. }
  35.  
  36. public interface IWriter : IDisposable
  37. {
  38. void Write(string s);
  39. }
  40.  
  41.  
  42. public class WriterTypeA : IWriter
  43. {
  44. public WriterTypeA()
  45. {
  46. Console.WriteLine($"WriterTypeA:Constructor");
  47. }
  48.  
  49. public void Write(string s)
  50. {
  51. Console.WriteLine($"WriterTypeA:{s}");
  52. }
  53.  
  54. public void Dispose()
  55. {
  56. Console.WriteLine($"WriterTypeA:Dispose");
  57. }
  58. }
  59.  
  60. public class WriterTypeB : IWriter
  61. {
  62. public WriterTypeB()
  63. {
  64. Console.WriteLine($"WriterTypeB:Constructor");
  65. }
  66.  
  67. public void Write(string s)
  68. {
  69. Console.WriteLine($"WriterTypeB:{s}");
  70. }
  71.  
  72. public void Dispose()
  73. {
  74. Console.WriteLine($"WriterTypeB:Dispose");
  75. }
  76. }
  77. }
  78. }
  79.  
Success #stdin #stdout 0s 29672KB
stdin
Standard input is empty
stdout
WriterTypeA:Constructor
WriterTypeA:test1
WriterTypeA:Dispose
WriterTypeB:Constructor
WriterTypeB:test2
WriterTypeB:Dispose
何かキーを押してください。