デリゲートは、C#における重要な概念で、メソッドの参照を格納できる型です。デリゲートを使用すると、メソッドを引数として渡したり、特定のメソッドをコールバックとして呼び出したりすることができます。これにより、イベント処理やコールバックの実装が容易になります。
メソッドの参照: デリゲートは、特定のメソッドのシグネチャと一致するメソッドの参照を保持します。このため、異なるメソッドを同じデリゲート型で扱うことができます。
型安全: デリゲートは型安全です。つまり、デリゲートが保持できるメソッドのシグネチャが一致しない場合、コンパイル時にエラーが発生します。
マルチキャスト: デリゲートは、複数のメソッドを呼び出すことができるマルチキャストデリゲートとしても使用できます。これにより、複数のメソッドを一度に呼び出すことができます。
以下は、Action
型のデリゲートを使用して、引数なしで戻り値なしのメソッドを参照するデリゲートを定義する例です。
public delegate void MyDelegate();
デリゲートを使ってメソッドを呼び出す例を示します。
using System;
public class DelegateExample
{
public static void Main()
{
MyDelegate myDelegate = new MyDelegate(MethodA);
myDelegate += MethodB; // メソッドを追加
myDelegate(); // MethodA と MethodB が呼び出される
}
public static void MethodA()
{
Console.WriteLine("Method A called");
}
public static void MethodB()
{
Console.WriteLine("Method B called");
}
}
引数を持つデリゲートの例を示します。
public delegate void MyDelegateWithArgs(string message);
public class DelegateWithArgsExample
{
public static void Main()
{
MyDelegateWithArgs myDelegate = new MyDelegateWithArgs(MethodWithArgs);
myDelegate("Hello, Delegate!"); // メッセージを引数として渡す
}
public static void MethodWithArgs(string message)
{
Console.WriteLine(message);
}
}
Unityでは、デリゲートはイベントやコールバックを実装する際に非常に便利です。以下は、Unityでのデリゲートの使用例です。
using UnityEngine;
public class DelegateExample : MonoBehaviour
{
// デリゲートの定義
public delegate void GameEvent();
// イベント
public event GameEvent OnGameStart;
void Start()
{
// イベントにメソッドを追加
OnGameStart += StartGame;
// イベントを呼び出す
OnGameStart?.Invoke(); // nullチェックを行い、メソッドが登録されている場合にのみ呼び出す
}
void StartGame()
{
Debug.Log("Game Started!");
}
}
デリゲートを使用することで、柔軟で再利用性の高いコードを実装することが可能になります。