.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. Без вышеуказанного входного параметра код будет работать?
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- namespace ClockDelegate
- {
- public class TimeInfoEventArgs: EventArgs
- {
- public int hour;
- public int minute;
- public int second;
- public TimeInfoEventArgs(int hour, int minute, int second)
- {
- this.hour = hour;
- this.minute = minute;
- this.second = second;
- }
- }
- public class Clock
- {
- private int hour;
- private int minute;
- private int second;
- public delegate void SecondChangeHandler(object clock, TimeInfoEventArgs timeInformation);
- public SecondChangeHandler SecondChanged;
- public void Run()
- {
- for (;;)
- {
- Thread.Sleep(100);
- System.DateTime dt = new System.DateTime();
- if (dt.Second != second)
- {
- TimeInfoEventArgs timeInformation = new TimeInfoEventArgs(dt.Hour, dt.Minute, dt.Second);
- if (SecondChanged != null) { SecondChanged(this, timeInformation); }
- }
- this.hour = dt.Hour;
- this.minute = dt.Minute;
- this.second = dt.Second;
- }
- }
- }
- public class DisplayClock
- {
- public void TimeHasChanged(object theClock, TimeInfoEventArgs ti)
- {
- Console.WriteLine("Current time: \t{0}:{1}:{2}", ti.hour.ToString(), ti.minute.ToString(), ti.second.ToString());
- }
- public void Subscribe(Clock theClock)
- {
- theClock.SecondChanged += new Clock.SecondChangeHandler(TimeHasChanged);
- }
- }
- public class LogCurrentTime
- {
- public void WriteLogEntry(object theClock, TimeInfoEventArgs ti)
- {
- Console.WriteLine("Logging to file: {0}:{1}:{2}", ti.hour.ToString(), ti.minute.ToString(), ti.second.ToString());
- }
- public void Subscribe(Clock theClock)
- {
- theClock.SecondChanged += new Clock.SecondChangeHandler(WriteLogEntry);
- }
- }
- public class Tester
- {
- public void Run()
- {
- Clock theClock = new Clock();
- DisplayClock dc = new DisplayClock();
- dc.Subscribe(theClock);
- LogCurrentTime lct = new LogCurrentTime();
- lct.Subscribe(theClock);
- theClock.Run();
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- Tester t = new Tester();
- t.Run();
- }
- }
- }
Решение задачи: «.NET 4.x Делегаты»
textual
Листинг программы
- System.DateTime dt = System.DateTime.Now;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д