你居然不知道要刪除什麼,因爲它並不像它具有添加靜態事件工作,如果DLR沒有看到一個刪除靜態事件屬性,當您執行+=
和-=
時,它會動態執行以下等效操作。
//d.MyEvent += new EventHandler(this.MyHandler);
var temp = d.MyEvent; //temp is null
temp += new EventHandler(this.MyHandler) //temp is now MyHandler
d.MyEvent = temp; //set it back
//d.MyEvent -= new EventHandler(this.MyHandler);
var temp = d.MyEvent; //temp is MyHandler
temp -= new EventHandler(this.MyHandler) //temp is now null
d.MyEvent = temp; //set it back
事件處理程序是一個MulticastDelegate所以你應該把它想的集合,因此,如果它只有要刪除,在最後一組屬性應該是零,因爲沒有什麼留下的事件處理程序。如果你在混音中添加了更多的事件,它會更清晰。
//d.MyEvent += new EventHandler(this.MyHandler);
var temp = d.MyEvent; //temp is null
temp += new EventHandler(this.MyHandler) //temp is now MyHandler
d.MyEvent = temp; //set it back
//d.MyEvent += new EventHandler(this.MyHandler2);
var temp = d.MyEvent; //temp is MyHandler
temp += new EventHandler(this.MyHandler2) //temp is now MyHandler,MyHandler2
d.MyEvent = temp; //set it back
//d.MyEvent -= new EventHandler(this.MyHandler);
var temp = d.MyEvent; //temp is MyHandler,MyHandler2
temp -= new EventHandler(this.MyHandler) //temp is now MyHandler2
d.MyEvent = temp; //set it back
如果你有來存儲不同的看法和需要的添加和刪除然後進行存儲類來包裝自己的行爲負責,並確保您返回它在你的TryGet。
public DelegateStoreage<T>{
public void Add(T del){
//Do your stuff
}
public void Remove(T del){
//Do your stuff
}
public static T operator +(DelegateStoreage<T> x, T y)
{
x.Add(y)
return x
}
public static T operator -(DelegateStoreage<T> x, T y)
{
x.Remove(y)
return y;
}
}
那麼,這沒有什麼區別。值仍然爲空。 – fettsnoken 2011-01-25 19:46:36
哦,好的 - 對不起。我在生成的代碼中看到了很多模式,例如來自WCF。 – Rup 2011-01-26 09:44:54