0

新しいキーワードを使用して、可変クラスインスタンスをローカル変数として初期化しています。次に、このオブジェクトをパラメータとしてデリゲートに渡します。この変数の有効期間は、デリゲートによって延長されますか?他のスレッドはこの変数を使用しますか、それとも独自のインスタンスを作成しますか?当たり前のことを聞いているかもしれませんが、確かにしたいと思います。

public void DoSometing(Action<Foo> action)
{
    Foo foo = new Foo();
    action.Invoke(foo);
}
4

1 に答える 1

3

メソッドを何らかの方法で「エスケープ」するローカル変数を渡すと、その有効期間延長されます。C# では、存在しないオブジェクトへの参照を含む変数を操作することはありません。この概念は、管理された環境では意味がありません。

そうです、fooこれからも生き続けます。別の通常のメソッドを単に呼び出した場合とまったく同じように、スレッド セーフに注意する必要があります。このシナリオでは、ラムダは問題の外観を変えません。

ただし、ローカル変数を閉じるラムダを返す場合は特に、これがより微妙な場合があります。このようなシナリオでは、ラムダ内から参照するすべての変数は、.foo

于 2012-06-04T00:14:54.450 に答える