C#のデリゲートとイベントの違い・使い分け方を完全解説!初心者でも安心
生徒
「C#を勉強していたら、デリゲートとイベントという言葉が出てきました。何が違うんですか?」
先生
「どちらも“何かが起きたときに処理を実行する仕組み”ですが、役割と使い道が少し違います。」
生徒
「パソコンを触ったことがない人でも分かるように教えてもらえますか?」
先生
「もちろんです。身近なたとえを使いながら、基本から順番に見ていきましょう。」
1. デリゲートとは何か?
C#のデリゲート(delegate)とは、「メソッド(処理のまとまり)を変数のように扱うための仕組み」です。変数が数値や文字を入れる箱だとすると、デリゲートは処理そのものを入れる箱だと考えると分かりやすいです。
たとえば、リモコンのボタンを想像してください。ボタン自体は「何をするか」を知りませんが、押されたときに実行される動作が登録されています。この「押されたら実行される動作」が、C#のデリゲートに近い考え方です。
デリゲートを使うことで、「どの処理を実行するか」を後から自由に差し替えることができます。これにより、プログラムの柔軟性が高まり、同じ仕組みを使い回せるようになります。
2. デリゲートの簡単な例
まずは、C#のデリゲートをとても簡単な例で見てみましょう。ここでは「メッセージを表示する処理」をデリゲートに登録します。
delegate void MyDelegate();
static void Hello()
{
Console.WriteLine("こんにちは");
}
static void Main()
{
MyDelegate d = Hello;
d();
}
この例では、MyDelegateという名前のデリゲートを作り、Helloというメソッドを登録しています。d()と書くと、記憶されている処理が実行されます。
難しい言葉が出てきましたが、「デリゲートは処理を呼び出すためのスイッチ」と覚えておくと十分です。
こんにちは
3. イベントとは何か?
イベント(event)は、デリゲートを安全に使うための仕組みです。特に、「何かが起きたことを他の場所に知らせたいとき」に使われます。
たとえば、家のインターホンを想像してください。ボタンが押されると音が鳴りますが、勝手に別の人が音の鳴らし方を変えることはできません。このように、通知する側が主導権を持つ仕組みがイベントです。
C#では、ボタンがクリックされたとき、ファイルが保存されたとき、データが変更されたときなど、「出来事」を扱う場面でイベントがよく使われます。
4. イベントの基本的な例
次に、イベントを使った簡単な例を見てみましょう。ここでは「ボタンが押された」という出来事を表現します。
delegate void ClickHandler();
class Button
{
public event ClickHandler Click;
public void Push()
{
if (Click != null)
{
Click();
}
}
}
static void OnClick()
{
Console.WriteLine("ボタンが押されました");
}
static void Main()
{
Button button = new Button();
button.Click += OnClick;
button.Push();
}
このコードでは、Clickというイベントに処理を登録しています。イベントは「起きたことを知らせるだけ」で、外部から勝手に実行することはできません。
ボタンが押されました
5. デリゲートとイベントの違い
ここまでで、それぞれの役割が少し見えてきました。整理すると、次のような違いがあります。
- デリゲート:処理を自由に呼び出せる
- イベント:出来事の通知専用で、安全性が高い
デリゲートは便利ですが、誰でも実行できてしまうため、意図しない動作につながることがあります。一方イベントは、「通知する側だけが実行できる」ため、安心して使えます。
6. どう使い分ければよいのか?
使い分けのポイントはとてもシンプルです。
・内部処理の切り替え → デリゲート
・何かが起きたことを知らせたい → イベント
たとえば、計算方法を差し替えたい場合はデリゲート、ボタン操作やユーザーの動作を通知したい場合はイベントが向いています。
プログラミング未経験の方は、「イベントはお知らせ、デリゲートは道具」と覚えると理解しやすくなります。