我想知道如何从父委托(delegate)的调用列表中删除单个委托(delegate)。
<DelegateName>.RemoveAll();
现在我可以删除所有的代理,这只是为了让想法付诸实现,看看它是否有效,但是删除的任何委托(delegate)都需要在运行时再次添加!!!
所以:...
foreach(Delegate d in <DelegateName>.getInvocationList)
{ // do something with 'D'?? }
现在我可以访问“D”,我可以将它放入 .Remove() 但它需要两个参数???请问我可以得到一些帮助吗?
最后,删除代理后,重新添加代理的最佳方式是什么? 所以我假设 Reflection 可能会在其中发挥作用,但交给你们了。
更新:
本质上有一个全局委托(delegate),它有许多事件存在于不同的 winforms 类中,这些类是它的实例。所有这些事件都有一个处理程序,用于在触发事件时处理该事件。一直位于顶部的委托(delegate)管理所有匹配其签名的处理程序被触发。我想在顶部弄乱这个委托(delegate),我想删除所有处理程序,然后在运行时重新添加它们。因此,顶部的委托(delegate)是一个多播委托(delegate),它的调用列表是单个委托(delegate)的列表,这些委托(delegate)依次指向我添加的四个处理程序之一。我希望这是有道理的,这是我在做什么的一般想法。
最佳答案
你不能 - 委托(delegate)是不可变的。您可以创建一个与旧代理等效的新代理,而无需执行某些操作,但您不能就地修改现有代理。
关于c# - 如何在运行时操作委托(delegate)的调用列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3396692/