私が次のようなものを書くと
myDataModel.ContentLoaded += (o,e) => { DoSomething(); }
その匿名の代理人はいつ(もしあれば)イベントから削除されますか?
簡単な例として、私はこのプログラムを書くことができます
class Program
{
public event EventHandler<EventArgs> MyEvent = delegate { };
static void Main(string[] args)
{
Program p = new Program();
while(true)
{
p.MyEvent += (o, e) => Console.WriteLine("Hello!");
Console.ReadLine();
p.Foo();
}
}
void Foo()
{
MyEvent(this, EventArgs.Empty);
}
}
そして、「Enter」を繰り返し押したときの出力は
Hello!
Hello!
Hello!
Hello!
Hello!
Hello!
Hello!
Hello!
Hello!
Hello!
...など。行を追加できます
p.MyEvent -= (o, e) => Console.WriteLine("Hello!");
その後p.Foo()
ですが、まったく別の匿名の代理人を削除するため、もちろん効果はありません。
それで、これとの取引は何ですか?これらの匿名の代理人を削除する方法はありますか?たとえば、次のような式を使用してデータをプルする非同期Silverlightアプリケーションの意味は何ですか?
_myDataContext.Load(myQuery, loadOperation =>
{
// do stuff with the data here
}, null);
?これらの種類のコールバックはイベントを使用して実装されていないと思いますが、もちろんそれを伝えることは不可能です(?)。
注意深く説明されていない場合、匿名の代表者は危険ですか?