performance - 究竟什么是委托(delegate)?

标签 performance c#-4.0 delegates action

我经常使用委托(delegate)(Actions、WaitCallbacks、Funcs),但我试图更好地理解它们到底是什么。

我对对象与引用类型等以及它们在堆与堆栈中的存储位置有相当好的理解?

基本上 - 我试图从性能的角度理解使用委托(delegate)。有没有人有任何资源链接或者可能有一个很好的解释?

此外 - 到底什么是"is"事件?他们与委托(delegate)有什么关系?它们基本上只是一个被迭代的委托(delegate)列表吗?

最佳答案

到目前为止所说的一切都是正确的。下面是它的工作原理:委托(delegate)有两个字段:一个指向可执行代码的指针和一个表示 this 参数的对象类型字段(您可以将委托(delegate)带到实例方法)。

当您调用此委托(delegate)时,CPU 会将指向代码的指针提取到寄存器中,然后“调用”此指针。调用指令不需要使用常量值。 CPU 可以跳转到内存中的可变位置。

事件只是委托(delegate)加上两个包装器方法,用于附加新委托(delegate)或删除现有委托(delegate)。令人困惑的部分是委托(delegate)有我遗漏的第三个字段:委托(delegate)!委托(delegate)形成一个链表。这称为 MulticastDelegate,这是一种可憎的行为。当您调用委托(delegate)时,它可能会导致调用具有相同签名的多个 方法。这就是事件的运作方式。事件是委托(delegate)类型的单个字段。

现在忘记多播委托(delegate),因为它们在实践中不相关。

关于performance - 究竟什么是委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9007155/

相关文章:

c# - 为什么在 C# 中使用动态类型?

swift - 对象初始化后是否立即调用事件?

c# - 调用单元测试委托(delegate)操作

iphone - SocketException 未被用户代码处理

c# - 在 C# 中安装应用程序之前执行一些操作

asp.net-mvc-3 - ASP.NET 性能分析 404/500 错误

android - 在多平台项目中将用户图像存储为二进制数据与静态文件的性能影响?

ios - 尝试理解委托(delegate)

javascript - 在 IE(7 和 8)中移动大尺寸图像非常慢

performance - 我怎样才能加速这个 MySQL 查询?