デリゲートとは?
デリゲート(delegate
)とは、メソッドを参照するための型です。
デリゲートを使用すると、メソッドを変数のように扱ったり、柔軟に呼び出すことができます。
また、イベントの仕組みやコールバック処理など、さまざまな場面で活用されます。
デリゲートの宣言
デリゲートとは、特定の引数と戻り値を持つメソッドを参照するための型です。
以下にいくつかの例を挙げてみます。
// 戻り値、引数なし
public delegate void DelegateSample1();
// 戻り値無し、string型引数
public delegate void DelegateSample2(string message);
// int型戻り値、string型引数
public delegate int DelegateSample3(string message);
実際に使用すると以下の様になります。
using UnityEngine;
public delegate void DelegateSample2(string message);
public class Sample : MonoBehaviour
{
private DelegateSample2 _delegate2;
private void Awake()
{
// デリゲートにメソッドを割り当てる
_delegate2 = Debug.Log;
}
private void Start()
{
// デリゲートからメソッドを呼び出す
_delegate2("Start!");
}
}
DelegateSample2
という名前で、戻り値がvoid
で引数がstring
のメソッドを参照できるデリゲート型を宣言しています。
DelegateSample2
型の_delegate2
変数を用意し、Debug.Log
メソッドを代入しています。
その後、_delegate2
に引数として文字列を渡して呼び出しています。
_delegate2
にはDebug.Log
を代入しているので、Debug.Log
が呼ばれ、コンソール上にログが出力されています。
デリゲートの特徴
デリゲートは型安全であり、戻り値と引数が一致しているメソッドのみを参照できます。
また、+=
演算子を使って、複数のメソッドをデリゲートに追加することもできます。
using UnityEngine;
public delegate void DelegateSample(string message);
public class Sample : MonoBehaviour
{
private DelegateSample _delegate;
private void Awake()
{
_delegate += Debug.Log;
_delegate += Debug.LogWarning;
}
private void Start()
{
_delegate("Start!");
}
}
_delegate
に、Debug.Log
とDebug.LogWarning
の2つのメソッドを代入しています。
その後、_delegate
を呼び出すと、コンソールに2種類のログが出力されます。
ActionとFunc
C#には、デリゲートの代わりに使えるAction
とFunc
というものが用意されています。
これらを使用すると、いちいちdelegate
の宣言をしなくてもよく、便利です。
そのため、こちらを使うことのほうが多いかもしれません。
Action
Action
は戻り値を設定できないため、void
型の戻り値を持つメソッド用です。
引数は最大で16個まで、任意の型を指定できます。
private Action _action;
private void Awake()
{
_action = () =>
{
Debug.Log("Start");
};
}
private void Start()
{
_action();
}
Func
戻り値が必要な場合は、Func
を使用します。
Func
では、戻り値と最大15個までの引数を任意の型で指定できます。
Func
で指定した型のうち、最後の型は戻り値の型になります。
private Func<int> _func;
private void Awake()
{
_func = () => 123;
}
private void Start()
{
// コンソールに、123と表示される
Debug.Log(_func());
}
ActionとFuncの違い
Action
特徴 | Action |
戻り値 | なし(void ) |
引数 | 任意の型で最大16個 |
Func
特徴 | Func |
戻り値 | 指定した型 |
引数 | 任意の型で最大15個(+戻り値) |
まとめ
コールバックの処理として、delegate
とAction
、Func
の説明をしました。
delegate
は特定の型を持つメソッドを参照できる型であり、イベントやコールバックの処理に役立ちます。
Action
は戻り値がvoid
のdelegate
型で、シンプルにメソッドを参照できる便利な型です。
Func
は戻り値のあるメソッドをより柔軟に処理できます。
それぞれの特徴を理解し活用することで、C#
のコードをより効率的に設計することができます。
Delegate
、Action
、Func
を使いこなせば、
Unity
やC#
プログラミングでのイベント処理やメソッドの柔軟な呼び出しが簡単になります。
ぜひ活用してみてください!