1. ホーム
  2. .net

[解決済み】.NETの「クロージャ」とは何ですか?

2022-04-18 05:21:03

質問

とは何ですか? クロージャ ? .NETにはあるのでしょうか?

.NETに存在するのであれば、それを説明するコードスニペット(できればC#で)を提供していただけませんか?

どのように解決するのですか?

私は このトピックに関する記事 . (たくさんの例があります)。

本質的に、クロージャは後で実行することができるコードのブロックですが、最初に作成された環境を維持します - つまり、メソッドの実行が終了した後でも、それを作成したメソッドのローカル変数などを使用することができます。

クロージャの一般的な機能は、C#では匿名メソッドとラムダ式で実装されています。

ここでは、無名メソッドを使った例を紹介します。

using System;

class Test
{
    static void Main()
    {
        Action action = CreateAction();
        action();
        action();
    }

    static Action CreateAction()
    {
        int counter = 0;
        return delegate
        {
            // Yes, it could be done in one statement; 
            // but it is clearer like this.
            counter++;
            Console.WriteLine("counter={0}", counter);
        };
    }
}

出力します。

counter=1
counter=2

ここで、CreateActionによって返されたアクションは、CreateAction自体が終了しているにもかかわらず、まだカウンター変数にアクセスでき、実際にそれを増分できることがわかります。