In .NET, what is the internal implementation of a delegate?

社会主义新天地 提交于 2019-11-28 19:28:52

All delegates inherit from the System.Delegate type which hold a Target and Method. More precisely they inherit from System.MultiCastDelegate which inherits from System.Delegate.

Internally it's a reference type, quite similar to a class. Transcribed it looks like this:

public /* delegate */ class PerformCalculation : MulticastDelegate {
    public PerformCalculation(object target, IntPtr method) {}
    public virtual void Invoke(int x, int y) {}
    public virtual IAsyncResult BeginInvoke(int x, int y, AsyncCallback callback, object state) {}
    public virtual void EndInvoke(IAsyncResult result) {}
}

I left the implementations of these members empty, they are actually mapped to code in the CLR. The compiler dynamically generates the method signatures, depending on the signature of the delegate declaration. Note the x and y arguments. The JIT compiler helps to get the constructor called, using the += or -= syntax, it knows the memory address of the delegate target method. The compiler automatically generated the target argument value, depending on whether the target method was static or not. The two arguments map to the (Multicast)Delegate.Target and Method properties. The actual base class instance can be either Delegate or MulticastDelegate, depending on how many targets were subscribed.

Lots of secret sauce going on here.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!