C# クロージャでの変数キャプチャの詳細な説明
はじめに
変数キャプチャは、C# クロージャの基本的な側面であり、クロージャがそれを囲んでいるスコープ内で定義された変数にアクセスできるようにします。この記事では、変数キャプチャについて詳しく説明し、その仕組み、値型と参照型のキャプチャ、ボックス化に関する具体的な質問に答えます。
ローカル変数のキャプチャ方法
変数キャプチャは、ラムダ式または匿名メソッドが、それを囲んでいるスコープ内のローカル変数にアクセスするときに発生します。ただし、捕獲の正確なメカニズムは明らかではありません。
これを理解するために、簡単な例を考えてみましょう:
<code class="language-csharp">Action action = () => { Console.WriteLine(counter); }; int counter = 5;</code>
この例では、ラムダ式は変数 counter
を囲むスコープ内でキャプチャします。これを実現するために、コンパイラは実際に、キャプチャされた変数への参照を保存するクロージャ クラスと呼ばれる匿名クラスを作成します。ラムダ式が実行されると、クロージャ クラスを介してキャプチャされた変数にアクセスします:
<code class="language-csharp">class ClosureClass { private int counter; public ClosureClass(int counter) { this.counter = counter; } public void Execute() { Console.WriteLine(counter); } }</code>
この場合、クロージャ クラスは変数 counter
への参照を保存し、それにアクセスするメソッドを提供します。
値の型と参照型
キャプチャされた変数の型によって、それがクロージャ クラスにどのように格納されるかが決まります。
梱包
値の型を取得するときにボックス化は必要ありません。キャプチャされた値はクロージャ クラスに直接保存され、キャプチャされた値に影響を与えることなく元の変数を変更できます。
以上がC# クロージャでの変数キャプチャはどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。