如果我喜歡寫東西匿名代表何時從事件中刪除?
myDataModel.ContentLoaded += (o,e) => { DoSomething(); }
當(如果有的話)是匿名委託從活動中移除?
作爲一個簡單的例子,我可以爲我按「確認」鍵多次爲
Hello!
Hello!
Hello!
Hello!
Hello!
Hello!
Hello!
Hello!
Hello!
Hello!
...等等編寫這個程序
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);
}
}
和輸出。我可以添加行
p.MyEvent -= (o, e) => Console.WriteLine("Hello!");
p.Foo()
後,但當然沒有任何影響,因爲我刪除一個完全不同的匿名委託。
那麼這是怎麼回事呢?有什麼辦法可以刪除這些匿名代表嗎?例如,對於使用表達式抽取數據的異步Silverlight應用程序有什麼影響?
_myDataContext.Load(myQuery, loadOperation =>
{
// do stuff with the data here
}, null);
?我假設這些回調函數並沒有使用事件來實現,但當然不可能(?)告訴。
如果不仔細考慮匿名代表是否危險?