Action, Func, Predicateデリゲートを使ってみた!
はじめに
Action, Func, Predicateデリゲートについて、使い方をざっくりまとめてみました。
あくまで使い方に全振りしたので正直なところ実用性は皆無なサンプルコードになっています(;´∀`)
使い方を理解する一助になれば幸いです。
Actionデリゲート
デリゲート | 戻り値 | 説明 |
---|---|---|
Action<T> |
void | 一つのT型の引数を受け取り、戻り値は返さない処理を行います |
今回はAction<T>
を利用しましたが引数なしのAction
や引数が2つのAction<T1,T2>
等々、最大で引数を16個受け取るActionデリゲートまで存在します。
Funcデリゲート
デリゲート | 戻り値 | 説明 |
---|---|---|
Func<T,TResult> |
TResult | 一つのT型の引数を受け取り、TResult型の戻り値を返す処理を行います |
今回はFunc<T>
を利用しましたが引数なしのFunc<TResult>
や引数が2つのFunc<T1,T2,TResult>
等々、最大で引数を16個受け取るFuncデリゲートまで存在します。
Predicateデリゲート
デリゲート | 戻り値 | 説明 |
---|---|---|
Predicate<T> |
bool | 一つのT型の引数を受け取り、bool型の戻り値を返す処理を行います |
こちらは...ActionやFuncみたいにたくさんデリゲートがあるわけではなさそうですね。 とりあえずこれだけのようです。
サンプルコード
//C#9.0以降のトップレベルステートメントを利用しています using System; //"Actionデリゲートを使ってみた。"という文字列をactionデリゲートが受け取り //そのままConsoleに出力してるだけ UseAction("Actionデリゲートを使ってみた。", o => Console.WriteLine(o)); //"Funcデリゲートを使ってみた。"という文字列をfuncデリゲートが受け取り //そのままConsoleに出力してるだけ UseFunc("Funcデリゲートを使ってみた。", o => o); //"Predicateデリゲートを使ってみた。"という文字列をpredicateデリゲートが受け取り //"Predicateデリゲートを使ってみた。"と比較して等値か確認して結果をConsoleに出力してるだけ UsePredicate("Predicateデリゲートを使ってみた。", o => o == "Predicateデリゲートを使ってみた。"); //UseActionメソッドは引数strを受け取り、何も返さない(void)actionデリゲートを実行します。 void UseAction(string str, Action<string> action) => action(str); //UseFuncメソッドは引数strを受け取り、string型の戻り値を返すfuncデリゲートを実行します。 //funcデリゲートはstring型の戻り値を返すのでその値をConsole.WriteLineで出力します。 void UseFunc(string str, Func<string, string> func) => Console.WriteLine(func(str)); //UsePredicateメソッドは引数strを受け取り、bool型の戻り値を返すpredicateデリゲートを実行します。 //predicateデリゲートはbool型の戻り値を返すのでその値をConsole.WriteLineで出力します。 void UsePredicate(string str, Predicate<string> predicate) => Console.WriteLine(predicate(str));
Actionデリゲートを使ってみた。 Funcデリゲートを使ってみた。 True
おわりに
デリゲートって結構説明が難しいというか、一回見ただけだとなかなかイメージがわかないんですよね...。 ここは使いながら慣れていくしかないのかな(;^_^A