C#のデリゲートの宣言とインスタンス化の方法を学ぼう|初心者向け解説
生徒
「C#のデリゲートってどんなときに使うものなんですか?」
先生
「デリゲートは、簡単に言えばメソッドを変数のように扱える仕組みのことです。後から実行する処理を渡したり、順番を変えたりできるようになります。」
生徒
「メソッドを変数ってどういうことですか?イメージがわきません…」
先生
「例えば、テレビのリモコンのボタンのように、同じボタンでも中に入っている動作を変えられる仕組みだと考えると分かりやすいですよ。次の章で具体的に説明しながら使い方を学びましょう!」
1. C#のデリゲートとは?
C#のデリゲート(delegate)とは、メソッドを格納できる特別な型のことです。プログラムの中で処理の内容を切り替えたいときや、メソッドを別の場所へ渡したいときに役立ちます。デリゲートを使うことで、処理を柔軟に組み替えたり、追加したりできるようになります。
デリゲートを理解することは、C#のイベント処理、コールバック処理、ラムダ式などを学ぶための大切な基礎になります。特にユーザーインターフェース(UI)やゲーム開発、Webアプリケーション開発でデリゲートは非常によく使われます。
2. デリゲートの宣言方法
まず、デリゲートを使うには宣言(定義)が必要です。宣言は次のようにして行います。
public delegate void MessageDelegate(string message);
上の例では、MessageDelegateという名前のデリゲート型を作っています。voidは戻り値が無いメソッドの型、string messageは受け取る引数です。
つまりこのデリゲートは、文字列を1つ受け取って何かを行うメソッドを保持できる型という意味になります。
3. デリゲートのインスタンス化(オブジェクトとして使う)
宣言したデリゲートを実際に使うには、メソッドと紐づけてインスタンス化します。
public delegate void MessageDelegate(string message);
class Program
{
static void PrintMessage(string msg)
{
Console.WriteLine(msg);
}
static void Main()
{
MessageDelegate del = new MessageDelegate(PrintMessage);
del("こんにちは!デリゲートの学習中です。");
}
}
実行結果:
こんにちは!デリゲートの学習中です。
ポイントは、デリゲートをPrintMessageメソッドに紐づけて、変数delとして保持している点です。まさに、リモコンのボタンにそのボタンが行う動作を登録しているイメージです。
4. デリゲートを使うメリット
デリゲートを利用すると、メソッドの切り替えがとても柔軟になります。例えば次のような場面で活躍します。
- 処理のルールを切り替えたい
- 別のメソッドを渡して、後から実行させたい
- イベント通知など、決まった手順で処理を呼び出したい
次の例は、デリゲート変数に別のメソッドを登録し直すことで、出力内容を切り替える例です。
public delegate void MessageDelegate(string message);
class Program
{
static void PrintJapanese(string msg)
{
Console.WriteLine("日本語:" + msg);
}
static void PrintEnglish(string msg)
{
Console.WriteLine("English: " + msg);
}
static void Main()
{
MessageDelegate del = PrintJapanese;
del("こんにちは");
del = PrintEnglish;
del("Hello");
}
}
実行結果:
日本語:こんにちは
English: Hello
このように、同じデリゲート変数delに別のメソッドを入れるだけで処理内容が変わるため、プログラム全体の自由度が大幅に高まります。
5. 初心者が最初につまずきやすいポイント
C#を学ぶ人がデリゲートで戸惑う点として、「メソッドを代入する」という考え方が抽象的に感じられることがあります。しかし、実際は「メソッドを箱に入れて渡している」ようなイメージで考えてみると理解しやすくなります。
デリゲートは、メソッドに共通の呼び出し口を用意して、どれを実行するか後から選べるようにするための仕組みと言えます。