你居然不知道要删除什么,因为它并不像它具有添加静态事件工作,如果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