C#中級

中級 C#で学ぶイベント駆動設計|練習問題編

導入

イベント駆動設計は、アプリケーションの応答性や拡張性を高めるための強力な手法です。特に、ユーザーインターフェースや非同期処理が重要な現場では、その効果を実感することが多いでしょう。本記事では、C#を用いた具体的なシナリオを通じて、イベント駆動設計の実践的な側面を探ります。

教科書レベルの解説(イベント駆動設計)

重要な概念の整理

イベント駆動設計では、アプリケーションの動作が「イベント」によってトリガーされます。これにより、ユーザーのアクションやシステムの状態変化に柔軟に対応することが可能です。特に、C#ではイベントとデリゲートを活用することで、簡潔かつ効率的にイベント駆動型のプログラムを構築できます。

コード例(C#)


using System;

public class Button
{
    public event EventHandler Clicked;

    public void Click()
    {
        OnClicked(EventArgs.Empty);
    }

    protected virtual void OnClicked(EventArgs e)
    {
        Clicked?.Invoke(this, e);
    }
}

public class Program
{
    public static void Main()
    {
        Button button = new Button();
        button.Clicked += Button_Clicked;
        button.Click();
    }

    private static void Button_Clicked(object sender, EventArgs e)
    {
        Console.WriteLine("Button was clicked!");
    }
}

コードの行ごとの解説

  1. using System; – .NETの基本的な機能を使用するための名前空間をインポートします。
  2. public class Button – ボタンを表すクラスを定義します。
  3. public event EventHandler Clicked; – ボタンがクリックされたときに発生するイベントを宣言します。
  4. public void Click() – ボタンがクリックされた際に呼び出されるメソッドです。
  5. OnClicked(EventArgs.Empty); – イベントを発生させるメソッドを呼び出します。
  6. protected virtual void OnClicked(EventArgs e) – イベントを発生させるためのメソッドで、イベントハンドラが登録されている場合に呼び出します。
  7. Clicked?.Invoke(this, e); – イベントハンドラが登録されている場合に、イベントを呼び出します。
  8. public static void Main() – プログラムのエントリポイントです。
  9. button.Clicked += Button_Clicked; – ボタンのクリックイベントにハンドラを登録します。
  10. button.Click(); – ボタンをクリックし、イベントを発生させます。
  11. private static void Button_Clicked(object sender, EventArgs e) – クリックイベントが発生した際に呼び出されるメソッドです。
  12. Console.WriteLine("Button was clicked!"); – ボタンがクリックされたことをコンソールに表示します。

練習問題編

以下の問題に挑戦し、イベント駆動設計の理解を深めてください。

  1. 問題1: ボタンがダブルクリックされたときに特定のメッセージを表示するイベントを追加してください。
  2. 問題2: ボタンがクリックされた回数をカウントし、カウントが5回に達したときに特定のメッセージを表示するように実装してください。
  3. 問題3: 複数のボタンを作成し、それぞれのボタンに異なるイベントハンドラを登録して、異なるメッセージを表示させてください。

まとめ

  • イベント駆動設計は、ユーザーアクションやシステムの状態変化に応じた柔軟な応答を可能にします。
  • C#では、デリゲートとイベントを活用することで、簡潔なコードでイベント駆動型アプリケーションを構築できます。
  • 実際の業務では、イベントの管理やデバッグが重要なポイントとなります。