0Pricing
C# Academy · レッスン

デリゲートとイベント

デリゲートとイベントによってC#のオブジェクト間で通信する仕組みを学びます

「デリゲートとイベント」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン5/6です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全6レッスンが含まれています。

デリゲートとイベント

デリゲートとイベント

次のレッスンへようこそ!このレッスンでは、C#のデリゲートとイベントについて、それぞれの目的と、イベント駆動型プログラミングを実現する方法を学びます。それでは始めましょう!

デリゲートとイベント — イラスト1

デリゲートとは

デリゲートとは

delegateは、メソッドへの参照を表す型です。メソッドをパラメーターとして渡し、動的に呼び出せるようにします。

重要ポイント:デリゲートは、C#でイベントやコールバック関数を実装するために不可欠です。

デリゲートの定義と使用

デリゲートの定義と使用

デリゲートを定義するには、delegateキーワードを使用します。例:

using System;

class Program {
    // Define a delegate
    public delegate void MessageDelegate(string message);

    static void DisplayMessage(string message) {
        Console.WriteLine(message);
    }

    static void Main() {
        // Create a delegate instance
        MessageDelegate msg = DisplayMessage;

        // Invoke the delegate
        msg("Hello, Delegates!");
    }
}

マルチキャストデリゲート

マルチキャストデリゲート

1つのデリゲートから複数のメソッドを参照でき、すべてのメソッドが順番に呼び出されます。例:

ヒント:複数の処理を実行する必要がある場合は、マルチキャストデリゲートを使用します。

using System;

class Program {
    public delegate void MessageDelegate(string message);

    static void ShowMessage(string message) {
        Console.WriteLine("Message: " + message);
    }

    static void LogMessage(string message) {
        Console.WriteLine("Log: " + message);
    }

    static void Main() {
        MessageDelegate msg = ShowMessage;
        msg += LogMessage; // Add another method

        msg("Hello, Multicast Delegates!"); // Both methods are invoked
    }
}

イベントとは

イベントとは

eventは、関心のある事象が発生したときに、クラスから他のクラスやオブジェクトへ通知するための仕組みです。イベントはデリゲートを基盤として構築されています。

重要ポイント:イベントを使うと、イベント駆動型プログラミングにおいて、発行元と購読者を疎結合にできます。

イベントの定義と使用

イベントの定義と使用

イベントを定義するには、デリゲート型とともにeventキーワードを使用します。例:

重要ポイント:イベントを使うと、リアクティブでイベント駆動型のシステムを構築できます。

using System;

class Publisher {
    public delegate void NotifyDelegate(string message);
    public event NotifyDelegate Notify; // Define an event

    public void RaiseEvent(string message) {
        Notify?.Invoke(message); // Invoke the event
    }
}

class Subscriber {
    public void OnNotify(string message) {
        Console.WriteLine("Subscriber received: " + message);
    }
}

class Program {
    static void Main() {
        Publisher pub = new Publisher();
        Subscriber sub = new Subscriber();

        pub.Notify += sub.OnNotify; // Subscribe to the event
        pub.RaiseEvent("Hello, Events!"); // Raise the event
    }
}

イベントの購読解除

イベントの購読解除

購読者は、-=` operatorを使用してイベントの購読を解除できます。例:

ヒント:メモリリークを防ぐため、必ずイベントの購読を解除してください。

using System;

class Publisher {
    public delegate void NotifyDelegate(string message);
    public event NotifyDelegate Notify;

    public void RaiseEvent(string message) {
        Notify?.Invoke(message);
    }
}

class Subscriber {
    public void OnNotify(string message) {
        Console.WriteLine("Subscriber received: " + message);
    }
}

class Program {
    static void Main() {
        Publisher pub = new Publisher();
        Subscriber sub = new Subscriber();

        pub.Notify += sub.OnNotify; // Subscribe
        pub.RaiseEvent("First Message");

        pub.Notify -= sub.OnNotify; // Unsubscribe
        pub.RaiseEvent("Second Message"); // No output, as subscriber is removed
    }
}

練習課題

練習課題

算術演算用のCalculationDelegateデリゲートと、OnCalculateイベントを作成してください。イベントを発生させて計算を実行するプログラムを作成します。例:

using System;

class Calculator {
    public delegate void CalculationDelegate(double result);
    public event CalculationDelegate OnCalculate;

    public void Add(double a, double b) {
        double result = a + b;
        OnCalculate?.Invoke(result);
    }
}

class Program {
    static void Main() {
        Calculator calc = new Calculator();

        // Subscribe to the event
        calc.OnCalculate += result => Console.WriteLine("Result: " + result);

        calc.Add(5, 3); // Outputs: Result: 8
    }
}

よくできました!

よくできました!

おめでとうございます!デリゲートとイベントを使って、動的でイベント駆動型のプログラムを構築する方法を学びました。次のレッスンでは、リスト、ディクショナリ、キューなどのコレクションについて学びます。引き続きコーディングしましょう!

デリゲートとイベント — イラスト10

よくある質問

「デリゲートとイベント」レッスンは無料ですか?

はい。「デリゲートとイベント」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全6レッスンが含まれています。

「デリゲートとイベント」で何を学びますか?

デリゲートとイベントによってC#のオブジェクト間で通信する仕組みを学びます ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C# Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン5/6です。

「デリゲートとイベント」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC# Academyレッスンでコードを書いて実行できますか?

はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. インターフェース入門
  2. 抽象クラス
  3. 静的メンバーとメソッド
  4. 列挙型と構造体を探る
  5. デリゲートとイベント
  6. コレクションを扱う:リスト、辞書、キュー
← C# Academyに戻る