我們可以使用下面的結構來聲明一個事件:是否使用禁用lambda表達式來初始化事件阻止GC?
public class MyClass
{
public event EventHandler<EventArgs> SomeEvent = (s,e) => {};
public void SomeMethod()
{
// Do something interesting... ;)
SomeEvent (this, new EventArgs);
}
}
,允許引發事件,而不需要檢查該事件是否爲空。
現在,讓我們假設一個對象A持有對MyClass對象的引用,註冊該事件,然後稍後取消註冊。
var myClass = new MyClass();
myClass.SomeEvent += MyHandler;
...
myClass.SomeEvent -= MyHandler;
myClass = null;
即使在事件中仍然存在無操作lambda表達式,GC是否會收集myClass?
我想是這樣,因爲對象根目錄不再被其他對象引用......任何人都可以確認或證明其他嗎?
我已經在今天下午兩次Skeeted,它只是在這裏15:45 :) – Stilgar 2011-02-09 13:45:54