2013年1月31日木曜日

開発環境

『初めてのC# 第2版』(Jesse Liberty+Brian MacDonald著、日向俊二訳、オライリー・ジャパン、2006年、ISBN978-487312-194-7)の 第17章(デリゲートとイベント)17.6(練習問題)練習17-1を解いてみる。

その他参考書籍

練習17-1.

コード

using System;
using System.Threading;

class TimeInfoEventArgs : EventArgs
{
    public readonly string msg;
    public TimeInfoEventArgs()
    {
        this.msg = "経過しました";
    }
}
class Clock
{
    private DateTime start;
    private DateTime stop;
    public Clock(int hours, int minutes, int seconds)
    {
        start = DateTime.Now;
        TimeSpan duration = new TimeSpan(hours, minutes, seconds);
        stop = start + duration;
    }
    public delegate void SecondChangeHandler(object clock, TimeInfoEventArgs ti);
    public SecondChangeHandler SecondChanged;
    public void Run()
    {
        for (int i = 0; ; i += 1)
        {
            Console.WriteLine("{0}秒", i);
            Thread.Sleep(1000);
            DateTime dt = DateTime.Now;
            if (dt >= this.stop)
            {
                TimeInfoEventArgs ti = new TimeInfoEventArgs();
                if (SecondChanged != null)
                {
                    SecondChanged(this, ti);
                    break;
                }
            }
        }
    }
}
class DisplayClock
{
    public void Subscribe(Clock clock)
    {
        clock.SecondChanged += new Clock.SecondChangeHandler(TimeHasChanged);
    }
    public void TimeHasChanged(object clock, TimeInfoEventArgs ti)
    {
        Console.WriteLine("{0}", ti.msg);
    }
}
class Tester
{
    public void Run()
    {
        Console.WriteLine("経過時間を入力(時間、分、秒)");
        int hours = Convert.ToInt16(Console.ReadLine());
        int minutes = Convert.ToInt16(Console.ReadLine());
        int seconds = Convert.ToInt16(Console.ReadLine());
        Clock clock = new Clock(hours, minutes, seconds);
        DisplayClock dc = new DisplayClock();
        dc.Subscribe(clock);
        clock.Run();
    }
    static void Main()
    {
        Tester t = new Tester();
        t.Run();
    }
}

入出力結果(Console Window)

経過時間を入力(時間、分、秒)
0
0
10
0秒
1秒
2秒
3秒
4秒
5秒
6秒
7秒
8秒
9秒
経過しました
続行するには何かキーを押してください . . .

0 コメント:

コメントを投稿