- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我经常使用委托(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/
Feel free to skip straight to TL/DR if you're not interested in details of the question 简短的序言: 我最近决定
我一直在阅读 A Tour of Go学习Go-Lang到目前为止一切顺利。 我目前在 Struct Fields类(class),这是右侧的示例代码: package main import "fm
Last time I got confused顺便说一下PowerShell急切地展开集合,基思总结了它的启发式如下: Putting the results (an array) within a
我是一名优秀的程序员,十分优秀!