我有以下代碼:C# - 匿名函數和事件處理
public List<IWFResourceInstance> FindStepsByType(IWFResource res)
{
List<IWFResourceInstance> retval = new List<IWFResourceInstance>();
this.FoundStep += delegate(object sender, WalkerStepEventArgs e)
{
if (e.Step.ResourceType == res) retval.Add(e.Step);
};
this.Start();
return retval;
}
通知我如何註冊我的事件成員(FoundStep)到當地就地匿名函數。
我的問題是:當函數'FindStepByType'將結束 - 將匿名函數從事件的委託列表中自動刪除,或者我必須在執行該函數之前手動刪除它? (以及我該怎麼做?)
我希望我的問題很清楚。
是不是就像使用謂詞一樣?當我使用謂詞時,我不釋放謂詞委託。 – 2009-09-07 14:02:32
謂詞不保存在任何地方,但在這裏,您正在訂閱一個事件。只要包含該事件的對象處於活動狀態,它就會持有對您的委託的引用,並間接對其變量進行引用。當你通過'.Where(x => x.Hidden)'來傳遞某個方法時,該方法將對它進行處理並將其扔掉(就'Where'方法而言,它只是一個局部變量。這不適用於你的情況。另外,如果'Where'存儲在某個地方,你也應該擔心這一點。 – 2009-09-07 14:05:49