我经常使用代理(Actions、WaitCallbacks和Funcs),但我正在努力更好地了解它们的“本质”。
我对对象与引用类型等方面有相当好的理解,知道它们存储在堆栈上的位置?
基本上,我正在尝试从性能角度理解使用代理。是否有任何资源链接或良好的解释可以提供?
另外,事件究竟是什么?它们与代理有什么关系?它们基本上只是一个迭代的代理列表吗?
我经常使用代理(Actions、WaitCallbacks和Funcs),但我正在努力更好地了解它们的“本质”。
我对对象与引用类型等方面有相当好的理解,知道它们存储在堆栈上的位置?
基本上,我正在尝试从性能角度理解使用代理。是否有任何资源链接或良好的解释可以提供?
另外,事件究竟是什么?它们与代理有什么关系?它们基本上只是一个迭代的代理列表吗?
委托是表示函数的数据结构 - 包括返回类型和参数(类型和数量)。任何与委托返回类型和签名匹配的方法都可以分配给这样的委托。
就性能而言 - 这是一个额外的抽象层,但很小。这不是你可能会注意到的事情。
从我的理解来看,委托可以有两种类型:
"实例绑定方法指针",这意味着委托包含订阅对象的对象实例和要调用的对象类中的方法。如果我有MyClass.Handler(),并且我创建五个MyClass实例,并为每个实例创建5个委托,指向Handler()方法,则每个委托将具有相同的方法指针,但是不同的对象实例。
静态方法指针,例如,委托到静态方法,在这种情况下,不需要对象上下文。
事件是MulticastDelegate对象,您甚至可以检查它们以查看谁订阅了事件。使用反射,您可以审计事件的订阅者。
ildasm
将回答你所有的问题。 - SK-logic