C# クロージャの探索: 囲みメソッドからの変数へのアクセス
プログラミングでは、「クロージャ」とは、周囲の関数の実行が終了した後でも、周囲のスコープから変数へのアクセスを保持する関数を指します。 C# では、これは多くの場合、匿名メソッドまたはラムダ式を使用して実装されます。 重要な特徴は、クロージャが親メソッドの変数を「記憶」できることです。
C# の例:
次のコード スニペットを考えてみましょう:
<code class="language-csharp">public Person FindById(int id) { return this.Find(delegate(Person p) { return (p.Id == id); }); }</code>
ここで、FindById
内の匿名デリゲートは、id
メソッドで宣言された FindById
変数にアクセスします。これは、クロージャが、それを囲んでいるスコープから変数へのアクセスを取得して維持できることを示しています。
さらなる学習:
クロージャについてさらに詳しく知りたい場合は、このテーマに関する Martin Fowler や Jon Skeet の著作などのリソースを参照してください。 詳細な説明と例が提供されています。
C# 6 構文の利用:
C# 6 では、ラムダ式を使用したクロージャのより簡潔な構文が導入されました。
<code class="language-csharp">public Person FindById(int id) { return this.Find(p => p.Id == id); }</code>
このラムダ式は、前の例の匿名デリゲートと同じ機能を実現しますが、読みやすさが向上しています。
同等の簡潔な構文:
上記の例は、矢印式を使用してさらに簡略化できます。
<code class="language-csharp">public Person FindById(int id) => this.Find(p => p.Id == id);</code>
これは、C# でクロージャを定義するよりコンパクトな方法を示しています。
以上がC# クロージャは親メソッドから変数にどのようにアクセスしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。