.NET 4.x Делегаты - C#

Узнай цену своей работы

Формулировка задачи:

Помогите разобраться: 1. Почему не выводит время на экран? это пример из учебника (Learn C# 3.0 O'REILLY Jesse Liberty, p.390), скопипастил вроде правильно - все перепроверил. 2. Зачем автор в сигнатуре делегата и в методах (TimeHasChanged, WriteLogEntry) указывает в качестве входного параметра object theClock (в указанных функциях он не используется и в метод Subcribe передается отдельно)? 3. Почему он указывает тип object, а не - Clock? 4. Без вышеуказанного входного параметра код будет работать?
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading;
  6. using System.Threading.Tasks;
  7. namespace ClockDelegate
  8. {
  9. public class TimeInfoEventArgs: EventArgs
  10. {
  11. public int hour;
  12. public int minute;
  13. public int second;
  14. public TimeInfoEventArgs(int hour, int minute, int second)
  15. {
  16. this.hour = hour;
  17. this.minute = minute;
  18. this.second = second;
  19. }
  20. }
  21. public class Clock
  22. {
  23. private int hour;
  24. private int minute;
  25. private int second;
  26. public delegate void SecondChangeHandler(object clock, TimeInfoEventArgs timeInformation);
  27. public SecondChangeHandler SecondChanged;
  28. public void Run()
  29. {
  30. for (;;)
  31. {
  32. Thread.Sleep(100);
  33. System.DateTime dt = new System.DateTime();
  34. if (dt.Second != second)
  35. {
  36. TimeInfoEventArgs timeInformation = new TimeInfoEventArgs(dt.Hour, dt.Minute, dt.Second);
  37. if (SecondChanged != null) { SecondChanged(this, timeInformation); }
  38. }
  39. this.hour = dt.Hour;
  40. this.minute = dt.Minute;
  41. this.second = dt.Second;
  42. }
  43. }
  44. }
  45. public class DisplayClock
  46. {
  47. public void TimeHasChanged(object theClock, TimeInfoEventArgs ti)
  48. {
  49. Console.WriteLine("Current time: \t{0}:{1}:{2}", ti.hour.ToString(), ti.minute.ToString(), ti.second.ToString());
  50. }
  51. public void Subscribe(Clock theClock)
  52. {
  53. theClock.SecondChanged += new Clock.SecondChangeHandler(TimeHasChanged);
  54. }
  55. }
  56. public class LogCurrentTime
  57. {
  58. public void WriteLogEntry(object theClock, TimeInfoEventArgs ti)
  59. {
  60. Console.WriteLine("Logging to file: {0}:{1}:{2}", ti.hour.ToString(), ti.minute.ToString(), ti.second.ToString());
  61. }
  62. public void Subscribe(Clock theClock)
  63. {
  64. theClock.SecondChanged += new Clock.SecondChangeHandler(WriteLogEntry);
  65. }
  66. }
  67. public class Tester
  68. {
  69. public void Run()
  70. {
  71. Clock theClock = new Clock();
  72. DisplayClock dc = new DisplayClock();
  73. dc.Subscribe(theClock);
  74. LogCurrentTime lct = new LogCurrentTime();
  75. lct.Subscribe(theClock);
  76. theClock.Run();
  77. }
  78. }
  79. class Program
  80. {
  81. static void Main(string[] args)
  82. {
  83. Tester t = new Tester();
  84. t.Run();
  85. }
  86. }
  87. }

Решение задачи: «.NET 4.x Делегаты»

textual
Листинг программы
  1. System.DateTime dt = System.DateTime.Now;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.3 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы