C# では、デリゲートは、1 つ以上のメソッドを参照し、関数ポインターのような方法でメソッドを呼び出すことができる強力で柔軟なメカニズムです。デリゲートは、イベント処理、コールバック関数、マルチスレッド プログラミングなどのシナリオで非常に役立ちます。この記事では、C# でのデリゲートの使用法を詳しく説明し、さまざまな種類のデリゲートの適用例を紹介します。
1. シングルキャストデリゲート
ユニキャスト デリゲートは最も単純なデリゲート タイプであり、参照できるメソッドは 1 つだけです。ユニキャスト デリゲートを使用したサンプル コードを次に示します。
delegate void MyDelegate(string message);
class Program
{
static void Main(string[] args)
{
MyDelegate myDelegate = new MyDelegate(DisplayMessage);
myDelegate("Hello, world!");
}
static void DisplayMessage(string message)
{
Console.WriteLine(message);
}
}
上の例では、MyDelegate
戻り値がなく文字列パラメーターを受け入れるメソッドを参照できる という名前のユニキャスト デリゲート型を定義しました。次に、メソッドをmyDelegate
参照するデリゲート インスタンスを作成します。DisplayMessage
デリゲート インスタンスへの呼び出しを通じて、文字列パラメーターを渡し、DisplayMessage
メソッドを実行します。
2. マルチキャストデリゲート
マルチキャスト デリゲートは、複数のメソッドを参照し、追加された順序で連続して呼び出すことができる特別な種類のデリゲートです。マルチキャスト デリゲートを使用したサンプル コードを次に示します。
delegate void MyDelegate(string message);
class Program
{
static void Main(string[] args)
{
MyDelegate myDelegate = null;
myDelegate += DisplayMessage1;
myDelegate += DisplayMessage2;
myDelegate("Hello, world!");
}
static void DisplayMessage1(string message)
{
Console.WriteLine($"Message 1: {
message}");
}
static void DisplayMessage2(string message)
{
Console.WriteLine($"Message 2: {
message}");
}
}
上の例では、MyDelegate
戻り値がなく文字列パラメーターを受け入れるメソッドを参照できる という名前のマルチキャスト デリゲート型を定義しました。次に、デリゲート インスタンスを作成しmyDelegate
、2 つのメソッドをDisplayMessage1
デリゲートDisplayMessage2
インスタンスに追加しました。デリゲート インスタンスを呼び出すことで、参照されたメソッドを順番に実行します。
3. 汎用デリゲート
ジェネリック委任は C# 2.0 の新機能であり、タイプセーフな委任メカニズムを提供します。汎用デリゲートは、そのシグネチャに一致するメソッドを参照するために使用できるテンプレートと考えることができます。以下は、汎用デリゲートを使用したサンプル コードですAction
。Func
class Program
{
static void Main(string[] args)
{
Action<string> displayMessageAction = DisplayMessage;
displayMessageAction("Hello, world!");
Func<int, int, int> addFunc = Add;
int result = addFunc(3, 5);
Console.WriteLine($"The sum is {
result}");
}
static void DisplayMessage(string message)
{
Console.WriteLine(message);
}
static int Add(int a, int b)
{
return a + b;
}
}
上の例では、一般的に使用されるAction
2 つのFunc
汎用デリゲート型を使用しました。Action<T>
値を返さず、T
型パラメーターを受け入れるメソッドを表します。型値を返し、型パラメーターを受け入れるFunc<T1, T2, TResult>
メソッドを示します。汎用デリゲートを使用することで、さまざまな型のメソッドをより柔軟に参照できます。TResult
T1
T2
要約する
デリゲートは C# の重要な機能であり、メソッドの参照と呼び出しを行うための便利で強力な方法を提供します。この記事では、ユニキャスト委任、マルチキャスト委任、および汎用委任の使用方法を詳しく紹介し、対応するサンプル コードを提供します。さまざまな種類のデリゲートとその使用法をマスターすると、デリゲートを活用してさまざまなプログラミングの問題を解決し、コードのスケーラビリティと保守性を向上させることができるようになります。