LEDチカチカ

演算子オーバーライド

LEDチカチカは準備のところで行いました。ここではちょっと違った方法でチカチカさせてみます。デジタル信号のON/OFFですから、OutputPortクラスのWriteメソッドを使うのは当たり前なのですが、演算子オーバーライドを使ってみます。本当は=演算子をオーバーライドさせたいのですが、C#では出来ないので、<<演算子を利用して<<=矢印のように表示できると分かりやすいかもしれませんので、これを採用してみます。

演算子オーバーライド
using System;
using System.Threading;         // 追加
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;  // 追加、参照設定にも追加
using GHI.OSHW.Hardware;        // 追加、参照設定にも追加
using Pin = GHI.OSHW.Hardware.FEZCerberus.Pin;

namespace LED
{
    public class Program
    {
        public static void Main()
        {
           DigitalOut LED1 = new DigitalOut(Pin.PC0, false);
           int count = 0;
            while (true)
            {
                Debug.Print("Hello World " + count++);
                LED1 <<= 1;
                Thread.Sleep(500);
                LED1 <<= 0;
                Thread.Sleep(500);
            }
        }
    }

    public class DigitalOut : OutputPort
    {
        public DigitalOut(Cpu.Pin pin, bool state)
            : base(pin, state)
        { 
        }

        public static DigitalOut operator <<(DigitalOut obj, int state)
        {
            obj.Write(state==0 ? false:true);
            return obj;
        }
    }
}
 1 
 2 
 3 
 4 
 5 
 6 エイリアス
 7 
 8 
 9 
10 
11 
12 
13 DigitalOutは<<演算子を持つ
14 OutputPortクラス。Pin.PC0は
15 GHI.OSHW.Hardware.FEZCerberus.Pin.PC0
16 の省略形(エイリアス)
17 
18 
19 LED1に1を出力させると読む
20 
21 LED1に0を出力させると読む
22 
23 
24 
25 
26 
27 OutputPortクラスを親に持つ
28 
29 
30 コンストラクタは親に丸投げ
31 
32 
33 
34 <<演算子のオーバーライド
35 従って<<=演算子も持つ
36 
37 
38 
39 
40