C#のマルチキャストデリゲートとは?基本の使い方をサンプルコードで解説
複数のメソッドへの参照を同時に保持できるデリゲートのことを、「マルチキャストデリゲート」と呼びます。通常のデリゲートは1つのメソッドしか参照できませんが、マルチキャストデリゲートでは「+」演算子や「+=」演算子を使って複数のメソッドを連結でき、デリゲートを1回呼び出すだけで、登録されたすべてのメソッドが登録順に実行されます。
マルチキャストデリゲートの基本操作
- メソッドの追加:「+」または「+=」演算子を使用します
- メソッドの削除:「-」または「-=」演算子を使用します
- 実行順序:呼び出しリスト(Invocation List)に登録された順番、つまり先頭から順に実行されます
サンプルコード
以下は、足し算と引き算を行う2つの静的メソッドを1つのデリゲートに登録し、動的に追加・削除しながら実行する例です。
using System;
delegate void myDelegate(int val1, int val2);
public class Demo {
public static void CalAdd(int val1, int val2) {
Console.WriteLine("{0} + {1} = {2}", val1, val2, val1 + val2);
}
public static void CalSub(int val1, int val2) {
Console.WriteLine("{0} - {1} = {2}", val1, val2, val1 - val2);
}
}
public class Program {
static void Main() {
myDelegate d = new myDelegate(Demo.CalAdd);
d += new myDelegate(Demo.CalSub);
d(45, 70);
d -= new myDelegate(Demo.CalAdd);
d(95, 70);
d += new myDelegate(Demo.CalSub);
d(88, 6);
d -= new myDelegate(Demo.CalAdd);
d(40, 20);
Console.Read();
}
}
コードの解説
まず、int型の引数を2つ受け取り、戻り値を持たないデリゲートを宣言しています。
delegate void myDelegate(int val1, int val2);
続いて、「+=」演算子を使って CalAdd() と CalSub() の2つのメソッドへの参照をデリゲートに登録し、「-=」演算子で削除することで、その都度異なる組み合わせのメソッドを実行しています。
myDelegate d = new myDelegate(Demo.CalAdd); // CalAdd を登録 d += new myDelegate(Demo.CalSub); // CalSub を追加 d(45, 70); // CalAdd → CalSub の順に実行 d -= new myDelegate(Demo.CalAdd); // CalAdd を削除 d(95, 70); // CalSub のみ実行 d += new myDelegate(Demo.CalSub); // CalSub をさらに追加 d(88, 6); // CalSub が2回実行される d -= new myDelegate(Demo.CalAdd); // リストに存在しないため変化なし d(40, 20); // CalSub が2回実行される
押さえておきたいポイント
このように、マルチキャストデリゲートを使えば、1つのデリゲート変数から複数のメソッドをまとめて呼び出すことができます。1つの出来事に対して複数の処理を実行したいイベント処理などの場面で特に役立ちます。なお、削除対象のメソッドが呼び出しリストに存在しない場合、「-=」による削除は何も影響を与えない点にも注意してください。
-
C#の名前空間(namespace)とは?定義方法と基本的な使い方を解説
名前空間とは名前空間(namespace)とは、ある一連の名前を別の一連の名前から分離して管理するための仕組みです。大規模なプロジェクトでは、複数の開発者が同じ名前のクラスやメソッドを作成することがあり、名前の衝突(コンフリクト)が発生する可能性があります。名前空間を使うことで、こうした衝突を防ぎ、コードを論理的に整理できます。また、.NET Framework が提供する System なども名前空間の一つであり、標準ライブラリの機能はすべて名前空間によって分類・管理されています。名前空間の定義方法名前空間の定義は、namespace キーワードで始まり、その後に名前空間名を続けて記述します
-
C#のデリゲートとは?仕組みと基本的な使い方をわかりやすく解説
C#におけるデリゲート(delegate)とは、メソッドへの参照を保持できる特殊な型です。デリゲート変数には特定のメソッドへの参照が格納され、その参照先はプログラムの実行時に動的に変更することも可能です。この特性を活かすことで、同じデリゲート変数を使いながら、状況に応じて異なるメソッドを呼び出す柔軟な設計が実現できます。デリゲートの主な用途デリゲートは、次のような場面で特に役立ちます。イベント処理の実装:ボタンクリックなどのイベント発生時に、登録されたメソッドを呼び出す仕組みとして利用されます。コールバックメソッド:非同期処理の完了時など、後から指定したメソッドを呼び出したい場合に使用されます