C#のイベントとは?基本の仕組みと使い方を実例付きで解説
C#におけるイベント(Event)とは、キーの押下、マウスのクリックや移動といったユーザー操作、あるいはシステムが生成する通知など、プログラムの外部で発生した「出来事」を表す仕組みです。
イベントはクラス内で宣言され、発生(raise)されます。そして、デリゲート(delegate)を介してイベントハンドラと関連付けられます。この関連付けは、同じクラス内でも別のクラスでも行うことが可能です。イベントを保持しているクラスは、そのイベントを外部に公開(パブリッシュ)する役割を担います。
イベント宣言の基本手順
クラス内でイベントを宣言するには、まずイベント用のデリゲート型を定義する必要があります。例えば、次のように記述します。
public delegate string myDelegate(string str);
続いて、このデリゲート型を使ってイベントを宣言します。
event myDelegate newEvent;
これで、myDelegate 型に基づくイベント newEvent の準備が整いました。あとは、このイベントにメソッド(イベントハンドラ)を登録し、必要なタイミングで呼び出すことで利用できます。
C#でのイベント処理サンプルコード
以下は、C#でイベントを実際に扱うシンプルな例です。
サンプルコード
using System;
namespace Demo {
public delegate string myDelegate(string str);
class EventProgram {
event myDelegate newEvent;
public EventProgram() {
// コンストラクタでイベントハンドラを登録
this.newEvent += new myDelegate(this.WelcomeUser);
}
public string WelcomeUser(string username) {
return "Welcome " + username;
}
static void Main(string[] args) {
EventProgram obj1 = new EventProgram();
string result = obj1.newEvent("My Website!");
Console.WriteLine(result);
}
}
}実行結果
Welcome My Website!
コードのポイント解説
- デリゲートの宣言:
public delegate string myDelegate(string str);により、文字列を受け取り文字列を返すメソッドを参照できるデリゲート型を定義しています。 - イベントの宣言: クラス内で
event myDelegate newEvent;としてイベントを宣言します。 - ハンドラの登録: コンストラクタ内で
+=演算子を使い、WelcomeUserメソッドをイベントに登録しています。 - イベントの発火:
Mainメソッド内でイベントを呼び出すと、登録されたWelcomeUserが実行され、結果が出力されます。
このように、C#のイベントはデリゲートと組み合わせることで、「何かが起きたときに、登録しておいた処理を自動的に実行する」という柔軟な設計を実現できます。GUIアプリケーションのボタンクリック処理など、実務でも頻繁に活用される重要な概念なので、ぜひ基本的な使い方をマスターしておきましょう。
-
C#の正規表現とは?基本概念とRegexクラスの使い方をわかりやすく解説
正規表現とは、入力テキストと照合(マッチング)を行うためのパターンのことです。.NETフレームワークには、このような照合を実現する正規表現エンジンが組み込まれており、開発者はこれを利用して高度な文字列操作を行えます。パターンは、1つ以上の文字リテラル、演算子、または構成要素から構成されます。これらを組み合わせることで、「特定の文字で始まる単語」「メールアドレス形式の文字列」など、柔軟な条件での文字列検索が可能になります。正規表現の基本的な使い方例えば、「S」で始まる単語を抽出したい場合は、次のようにC#で正規表現を使用します。コード例using System; using System.Tex
-
Java 9のコンパクト文字列(Compact Strings)とは?仕組みと内部実装の変化を解説
コンパクト文字列(Compact Strings)の概要Java 9以降、JVMはコンパクト文字列(Compact Strings)と呼ばれる新機能によって、文字列のメモリ使用量を最適化するようになりました。従来のchar[]配列の代わりに、文字列をbyte[]配列として表現できるようになったのが最大の特徴です。エンコーディングにはUTF-16またはLatin-1(ISO-8859-1)が使用され、これにより1文字あたり1バイトまたは2バイトで文字を格納できます。JVMがその文字列にISO-8859-1/Latin-1の範囲内の文字のみが含まれていることを検出した場合、内部的には1文字あたり1