gpt4 book ai didi

c# - 如何在运行时操作委托(delegate)的调用列表?

转载 作者:太空狗 更新时间:2023-10-29 21:15:14 24 4
gpt4 key购买 nike

我想知道如何从父委托(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com