前記事:デリゲート,コールバック,ラムダ式,非同期とやらを調べてみた①Delegate - ロバメモ - 素人のUnity覚書と奮闘記
ActionとかFuncってなに?
delegateを定義する手間が省ける便利グッズと勝手に解釈してみた。
前記事でも触れたけど、delegateの定義はメソッドの外じゃないとエラーでるのよ。でも、メソッドの中で使いたいのよ。ってなことで、定義しなくても使えるようにしてよ!という願いを叶えてくれる奴ら。
名前空間の呼び出し
Action, Funcを使う際にはSystemを呼び出しておく。
csファイルの先頭部分に書いてるアレ。
using System;
Action
例として、コンソールにHelloと表示するメソッド:Methodを参照するactionを作成して実行するコードを挙げる。
//参照したいメソッド void Method() { Debug.Log("Hello"); } void Start(){ //定義&インスタンス生成 Action action = Method; //実行 action(); }
出力結果
Hello
delegateを定義して書くのに比べると少し簡素化されてますね〜♪
書式
Action インスタンス名 = 参照したいメソッド名;
参照したいメソッドに引数がある場合
//参照したいメソッド void Method(string str) { Debug.Log(str); } void Start(){ Action<string> action = Method; action("Hello"); }
こんな感じで書く。
Action<引数の型> インスタンス名 = 参照したいメソッド名; インスタンス名(引数の値);
ActionとFuncの違い
では、戻り値がある場合、Actionはどうかくの?
そういう時は、ActionではなくFuncを使うらしい。
つまり、ActionとFuncの違いは、戻り値の有(=Func)無(=Action)だそうな。
Func:戻り値がある場合
//参照したいメソッド int Method() { return 100; } void Start(){ //定義&インスタンス生成 Func<int> func = Method; //実行 戻り値を受け取ってコンソールに表示 結果 : 100 Debug.Log(func()); }
Func : 戻り値と引数がある場合
//参照したいメソッド int Method2(string s) { return s.Length; } void Start(){ //定義&インスタンス生成 Func<string, int> func = Method; //実行 戻り値を受け取ってコンソールに表示 結果 : 5 Debug.Log(func("Hello")); }
戻り値と引数が両方あるので引数, 戻り値の順で設定する。
Func<引数の型, 戻り値の型> インスタンス名 = 参照したいメソッド;
以上
次の記事:デリゲート,コールバック,ラムダ式,非同期とやらを調べてみた③コールバック - ロバメモ - 素人のUnity覚書と奮闘記