English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# Funcデリゲート

C#には組み込みのジェネリックデリゲート型FuncとActionが含まれており、そのため、ほとんどの場合、カスタムデリゲートを手動で定義する必要はありません。

FuncはSystem命名空間に含まれるジェネリックデリゲートです。ゼロ個または複数の入力パラメータを持ち、 out パラメータ。最後のパラメータはoutパラメータとして見なされます。

Funcデリゲートとは何か

Funcデリゲートは返り値を持つデリゲートを表します。

FuncはSystem命名空間でinパラメータとoutパラメータを定義しています。 のデリゲート、以下の通りです:

namespace System
{    
    public delegate TResult Func<in T, out TResult>(T arg);
}

尖括号中的最後の引数<>は返り値の型とされ、他の引数は入力パラメータの型とされます。以下の図を参照してください。

Funcデリゲート

2つの引数と1つの出力引数を持つFuncデリゲートは以下のようになります。

Funcデリゲート

以下のFuncデリゲートは、2つのint型の引数を受け取り、int型の値を返します:

Func<int, int, int> sum;

上記のfuncデリゲートに、2つの引数を持つメソッドを割り当てることができます。int引数を持ち、その値を戻り値として返すint値。

class Program
{
    static int Sum(int x, int y)
    {
        return x + y;
    }
    static void Main(string[] args)
    {
        Func<int,int, int> add = Sum;
        int result = add(10, 10);
        Console.WriteLine(result); 
    }
}
出力:
20

Funcデリゲートのタイプは、0から16個の異なるタイプの引数がありますが、結果を表すout引数を含める必要があります。例えば、以下のFuncデリゲートは、引数がなく、out引数のみを含んでいます。

Func<int> getRandomNumber;

Funcデリゲートの例説明

  • Funcは少なくとも0個の引数、多くても16個の引数があり、戻り値は汎型で指定。戻り値はvoidであってはなりません。

  • Func<int> は、引数がなく、戻り値がint型のデリゲート。

  • Func<object,string,int> は、引数としてobject, stringを指定し、戻り値がint型のデリゲート。

  • Func<object,string,int> は、引数としてobject, stringを指定し、戻り値がint型のデリゲート。

  • Func<T1,T2,,T3,int> は、引数としてTを指定します1,T2,,T3(汎型),戻り値がint型のデリゲート。

C# Funcデリゲートと匿名メソッド

delegateキーワードを使用して、匿名メソッドをFuncデリゲートに割り当てることができます。

Func<int> getRandomNumber = delegate()
                            {
                                Random rnd = new Random();
                                return rnd.Next(1, 100);
                            };

C# FuncデリゲートとLambda

Funcデリゲートもまた、以下のようにlambda表現式と一緒に使用できます:

Func<int> getRandomNumber = () => new Random().Next()1, 100);
//または
Func<int, int, int> Sum = (x, y) => x + y;

 覚えておくべきポイント

  1. Func は内蔵デリゲート型です。

  2. Func デリゲート型は値を返す必要があります。

  3. Func デリゲート型はゼロから16個の入力パラメータがあります。

  4. Func デリゲートは ref と out パラメータを許可しません。

  5. Func デリゲート型は匿名メソッドやlambda式と一緒に使用できます。