不调用空委托吗?

Dai*_*oto 1 .net delegates virtual-machine

在.NET中,当你有一个只有一个空方法订阅它的委托时,.NET VM是否意识到这一点并且甚至不会调用它?

我问,因为我注意到,当您订阅一次时,调用计数设置为2,但是当您取消订阅时,该值将下降到0(而不是1).

Han*_*ant 5

不,你看到的是MulticastDelegate类,它优化了只有一种目标方法的一般情况.只有一个,它可以将目标存储在基类'(Delegate)_methodBase和_target字段中.

当有多个时,它必须创建一个列表来存储目标.现在它使用_invocationList字段,因此它可以根据需要存储任意数量的目标.换句话说,_invocationCount 永远不会是1.

您可以通过在调试器中扩展"base"来看到这一点.