.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;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д