「キャプチャされた変数」で変数のキャプチャ方法は?キャプチャされた変数...キャプチャされた変数は実際には何を表していますか?
「キャプチャされた」という用語は実際には何を表していますか?
ボクシングを関与させずに値の型を参照することを意味しますか?
おかげ
「キャプチャされた変数」で変数のキャプチャ方法は?キャプチャされた変数...キャプチャされた変数は実際には何を表していますか?
「キャプチャされた」という用語は実際には何を表していますか?
ボクシングを関与させずに値の型を参照することを意味しますか?
おかげ
キャプチャ変数は、一般的に閉鎖(基本的にインライン関数)で撮影した変数を参照します。 「キャプチャする」とは、インライン関数が外部関数の変数への参照を「取得」しなければならないことを意味します。これを行うために、C#コンパイラは内部クラスを生成し、内部変数(後でインライン関数が参照する)に外部変数を参照渡しします。コードを逆アセンブルすると、これを見ることができます。
は、上記の例では、以下の
void Main()
{
string s = "hello";
Action a = delegate
{
Debug.WriteLine(s);
};
s = "hello2";
a();
}
を考慮し、文字列変数sは、インラインアクションAによって捕捉されます。
C#コンパイラは内部クラスを作成します。このクラスは、変数sの値を取得するために参照するActionクラスです。文字列sはアクションaへの参照によって渡されるので、実際には "hello"ではなく "hello2"が出力されることに注意することが重要です。これは、明確に理解できない場合に意図しない副作用を引き起こす可能性があり、「変更されたクロージャにアクセスする」と呼ばれます。
これも価値があります。 http://blogs.msdn.com/b/matt/archive/2008/03/01/understanding-variable-capturing-in-c.aspx – pencilCake