●学校情報

講座一覧・募集状況

学習方法

学習サポート

修了生の評価

受講生の横顔

当学院について

入学相談

入学手続

 

●講座情報

技術者養成講座

プログラミング講座

WEB講座

情報処理試験講座

Excel講座

Access講座

 

●関連コラム

関連コラム

関連用語集

 

logo

 

 

関連用語集

「何かが起きたら知らせる」仕組み「event(イベント)」とは?

C#の event(イベント) は、特定の動作や変化が起きたときに、あらかじめ登録された処理を自動で呼び出すための仕組みです。
主にGUIプログラミングや、状態変化の通知に使われます。

イベントの基本構成

イベントは以下の3つで構成されます:

  • delegate(デリゲート): 呼び出すメソッドの型
  • event: 登録・通知される変数
  • イベントハンドラ: 実際に実行されるメソッド

基本的な定義例

public class Button {
    public delegate void ClickHandler(string message);
    public event ClickHandler OnClick;

    public void Click() {
        if (OnClick != null) {
            OnClick("ボタンがクリックされました");
        }
    }
}
    

イベントの使い方

public class Program {
    static void Main() {
        Button btn = new Button();

        // イベントに処理を登録(+=)
        btn.OnClick += ShowMessage;

        btn.Click();  // → ShowMessage が実行される
    }

    static void ShowMessage(string msg) {
        Console.WriteLine("通知:" + msg);
    }
}
    

イベントの特徴

  • +=複数の処理を登録可能(マルチキャスト)
  • -= で処理を解除できる
  • 外部から直接呼び出し不可(eventが守ってくれる)

イベントをもっと簡単に定義(Action型)

public class Timer {
    public event Action OnFinished;

    public void Finish() {
        OnFinished?.Invoke();  // nullチェックしながら呼び出し
    }
}
    

実用例:イベントで通知するクラス

public class Counter {
    public event Action OnThresholdReached;

    private int count = 0;
    private int threshold = 5;

    public void Add() {
        count++;
        if (count >= threshold) {
            OnThresholdReached?.Invoke(count);
        }
    }
}
    
Counter c = new Counter();
c.OnThresholdReached += value => Console.WriteLine("しきい値に到達:" + value);
for (int i = 0; i < 6; i++) c.Add();
    

delegateとeventの違い

項目 delegate event
アクセス 外部から自由に操作できる += / -= でのみ登録・解除
安全性 上書きも可能(危険) 外部からの呼び出しを制限(安全)
主な用途 コールバック用 イベント通知用

まとめ

event(イベント)は、「何かが起きたときに、自動で処理を実行する」ための仕組みです。
delegateをベースに、安全にイベントを通知・処理する構造になっており、GUI・ゲーム・通知処理など幅広く使われます。
event + delegate のセットで理解しておくと、実用的で柔軟なプログラムが書けるようになります!

 

C#関連用語集

−−−−−  C#  −−−−−

C#の基本単位「クラス(Class)」とは?

クラスから生まれる実体「オブジェクト(Object)」とは?

クラスの実体「インスタンス(Instance)」とは?

オブジェクトの初期化に使う「コンストラクタ(Constructor)」とは?

フィールドへのアクセスを制御!「プロパティ(Property)」とは?

クラスが持つデータ「フィールド(Field)」とは?

クラスの動作を定義する「メソッド(Method)」とは?

既存のクラスを引き継ぐ「継承(Inheritance)」とは?

同じ命令で異なる動きができる「多態性(Polymorphism)」とは?

データを守る「カプセル化(Encapsulation)」とは?

土台だけを用意する「抽象クラス(Abstract Class)」とは?

ルールを定める仕組み「インターフェース(Interface)」とは?

親クラスのメソッドを上書きする「オーバーライド(Override)」とは?

引数の違いで同じ名前が使える「オーバーロード(Overload)」とは?

C#で自分自身を指す「thisキーワード」とは?

親クラスの機能を使う「baseキーワード」とは?

インスタンス不要で使える「static(静的)」とは?

値を変えたくないときに使う「readonly / const(定数)」とは?

メソッドを渡せる仕組み「delegate(デリゲート)」とは?

「何かが起きたら知らせる」仕組み「event(イベント)」とは?

簡潔な書き方ができる「ラムダ式(Lambda Expression)」とは?

C#で使える「LINQ(言語統合クエリ)」とは?

エラーから安全に回復する「例外処理(try-catch-finally)」とは?

意図的にエラーを発生させる「throw(スロー)」とは?

名前空間やリソースを扱う「usingディレクティブ」とは?

クラスの整理に便利な「namespace(名前空間)」とは?

型を柔軟に扱う「ジェネリクス(Generics)」とは?

データの集まりを扱う「コレクション(List / Dictionary / HashSet)」とは?

処理を止めずに進める「非同期処理(async / await)」とは?

簡単に使えて便利!「自動実装プロパティ」と「プロパティ初期化子」