レガシーコードからの脱却

レガシーな職場でも独学でどうにか頑張っていくブログです。

【お勉強記録】C#文法学び直し。イベント

イベント

Visual Studioによって、特に考えることなく、イベント機能を使っていましたが、 イベントはあらかじめ、メソッドの参照オブジェクトを保有しておくことで、機能を実現しているようです。

イベントは発生を監視するイベントループと、イベント発生した時に実際に処理されるイベントハンドラで成り立っています。

delegateで実現できるイベントですが、C#ではさらにイベントに特化したeventキーワードが用意されています。

eventで宣言されたデリゲートは、同じクラスからのみ呼び出しはできないが、外からデリゲートにメソッドを追加できるという特徴を持っています。

using System;

namespace test
{
    class Counter
    {
        public event EventHandler ThresholdReached;

        protected virtual void OnThresholdReached(EventArgs e)
        {
            EventHandler handler = ThresholdReached;
            if (handler != null)
            {
                handler(this, e);
            }
        }
        public void Start()
        {
            System.Threading.Thread.Sleep(5000);
            if (ThresholdReached != null)
            {
                //"ThresholdReached"イベントの発生
                ThresholdReached(this, EventArgs.Empty);
            }
        }

        
    }
    class Program
    {


        static void Main(string[] args)
        {
            Counter c = new Counter();
            c.ThresholdReached += c_ThresholdReached;
            c.Start();
            Console.ReadLine();
        }
        static void c_ThresholdReached(object sender, EventArgs e)
        {
            Console.WriteLine("5秒経った後に実行");
        }

    }
}

イベントって、observerパターンに近い感じがしますね。

デザインパターンとかもしっかり勉強して、自分の中に蓄積させていきたいですねー