3秒でわかる!「デリゲート」【UnityC#】
デリゲートとは
メソッドへの参照 です!
クラスみたいに参照して使えます。
書き方
自分でデリゲートを定義するやり方と、.NET Frameworkクラスライブラリに定義されてるAction、Funcを使うやりかたがあります。
自分で定義
delegateという修飾子を使うことでデリゲートを作れます。
引数なし、戻り値なし
public delegate void TestDelegate1(); void Start(){ TestDelegate1 td1=PrintA; td1(); } public void PrintA () { Debug.Log("A"); }
引数あり、戻り値なし
public delegate void TestDelegate2<T>(string str); void Start(){ TestDelegate2<string> td2=Print; td2("B"); } public void Print (string str) { Debug.Log(str); }
引数なし、戻り値あり
public delegate string TestDelegate3(); void Start(){ TestDelegate3 td3=ReturnCharacter; Debug.Log(td3()); } public string ReturnCharacter() { return"C"; }
引数あり、戻り値あり
public delegate string TestDelegate4<T>(string str); void Start(){ TestDelegate4<string> td4=ReturnCharacter; Debug.Log(td4("D")); } public string ReturnCharacter(string str) { return str; }
Action、Func
この二つを使うときは以下を忘れないようにしましょう。
using System;
Action
戻り値なしのデリゲートを定義できます。
void Start(){ Action a1=PrintA; a1(); Action<string> a2=Print; a2("B"); } public void PrintA () { Debug.Log("A"); } public void Print (string str) { Debug.Log(str); }
Func
戻り値ありのデリゲートを定義できます。
void Start(){ Func<string> f1=ReturnCharacter; Debug.Log(f1()); Func<string,string> f2=ReturnCharacter; Debug.Log(f2("D")); } public string ReturnCharacter() { return"C"; } public string ReturnCharacter(string str) { return str; }
デリゲートの足し算
引数と戻り値が一致(または互換可能)、または戻り値引数なしデリゲート同士なら、足し算もできます。
void Start () { Action a1 = PrintA; Action a2 = PrintA; Action a3 = a1+a2; a3(); } public void PrintA () { Debug.Log("A"); }