C#イベント:入門ガイド

こんにちは、未来のプログラマーさんたち!今日は、C#のイベントのワクワクする世界に飛び込みます。あなたの近所の親切なコンピュータの先生として、私はこの旅を一歩一歩ガイドします。プログラミングが初めてであれば心配しないでください。基本から始めて、少しずつ進んでいきます。それでは、始めましょう!

C# - Events

イベントとは?

パーティーで友達が来るのを待っているとします。彼らが来たら、挨拶をしたいですよね。C#でのイベントも同様に働きます。イベントは、オブジェクトが他のオブジェクトに興味深いことが起こったときに通知する方法です。コード内に「通知システム」を設定しているようなものです。

実世界の類似

イベントをドアベルに例えると考えましょう。誰かがドアベルを押す(イベント)と、あなた(イベントハンドラ)はドアに行く応答を行います。ドアベルは誰が応答するか知らず、気にしません。ただ、誰かがドアの前いることを知らせるだけです。

デリゲートとイベントの使用

イベントに詳しくなる前に、デリゲートについて理解する必要があります。心配しないでください。それほど恐ろしいものではありません!

デリゲートとは?

デリゲートはC#での中間者です。メソッド(関数)の参照を保持し、必要に応じてそれを呼び出すことができます。デリゲートを洗練されたビジネスカードのように考えましょう。連絡先情報だけでなく、あなたに代わって電話をかけてもらえるようなものです。

簡単なデリゲートの例を見てみましょう:

public delegate void SimpleDelegate(string message);

class Program
{
static void Main(string[] args)
{
SimpleDelegate d = new SimpleDelegate(ShowMessage);
d("Hello, Delegates!");
}

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

この例では、SimpleDelegateは私たちのデリゲート型です。それをインスタンス化(d)して、ShowMessageメソッドに関連付けます。d("Hello, Delegates!")を呼び出すと、実際にはShowMessage("Hello, Delegates!")を呼び出しています。

イベントの宣言

デリゲートを理解したので、イベントの仕組みを見てみましょう。イベントは通常、デリゲートを使って宣言されます。以下は基本的な構文です:

public event DelegateType EventName;

実際的な例を考えましょう。シンプルな銀行アプリケーションを構築しているとします:

public class BankAccount
{
private decimal balance;
public delegate void BalanceChangedEventHandler(decimal newBalance);
public event BalanceChangedEventHandler BalanceChanged;

public decimal Balance
{
get { return balance; }
set
{
balance = value;
OnBalanceChanged(balance);
}
}

protected virtual void OnBalanceChanged(decimal newBalance)
{
BalanceChanged?.Invoke(newBalance);
}
}

この例では、BankAccountクラスとBalanceChangedイベントを作成しています。残高が変更されるたびに、このイベントが発火します。

例:すべてを組み合わせる

このBankAccountクラスとイベントを使ってみましょう:

class Program
{
static void Main(string[] args)
{
BankAccount account = new BankAccount();
account.BalanceChanged += Account_BalanceChanged;

account.Balance = 1000;
account.Balance = 2000;
account.Balance = 500;
}

private static void Account_BalanceChanged(decimal newBalance)
{
Console.WriteLine($"Your new balance is: ${newBalance}");
}
}

このプログラムを実行すると以下のようになります:

Your new balance is: $1000
Your new balance is: $2000
Your new balance is: $500

詳細に説明する

  1. BankAccountオブジェクトを作成します。
  2. BalanceChangedイベントに订阅します。
  3. 残高を3回変更します。
  4. 残高が変更されるたびに、私たちのAccount_BalanceChangedメソッドが自動的に呼び出されます。

これがイベントの魔法です!BankAccountクラスは、誰が変更をリスニングしているか知る必要はありません。単にそれを通知し、興味がある人はそれに応じて反応できます。

一般的なイベントパターン

以下は、C#でよく見られるイベントのパターンです:

パターン 説明
EventHandler 標準的なイベントパターン public event EventHandler MyEvent;
カスタムEventArgs カスタムデータの渡し方 public event EventHandler<CustomEventArgs> MyEvent;
イベントアクセッサ イベントアクセスの制御 public event EventHandler MyEvent { add { ... } remove { ... } }

結論

C#のイベントは、緩結合で反応性の高いアプリケーションを作成する強力な方法です。オブジェクトは、ラジオ局のように誰がリスニングしているか知らずに通知を广播します。

忘れないでください、練習は完璧に近づけます!自分でイベントを持つクラスを作成し、さまざまなシナリオを試してみてください。それでは、あなたもイベントの専門家になるまでに、C#アプリケーション内でオブジェクトの交響曲を指揮するまでに進んでいきましょう!

未来のプログラマーさんたち、ハッピーコーディング!??

Credits: Image by storyset