1. Specifically speaking, a delegate object maintains three important pieces of information:
• The address of the method on which it makes calls
• The arguments (if any) of this method
• The return value (if any) of this method
2. When the C# compiler processes delegate types, it automatically generates a sealed class deriving from System.MulticastDelegate. This class (in conjunction with its base class, System.Delegate) provides the necessary infrastructure for the delegate to hold onto a list of methods to be invoked at a later time.
3. C# delegate definition results in a sealed class with three compiler-generated methods whose parameter and return types are based on the delegate’s declaration. The following pseudo-code approximates the basic pattern:
// This is only pseudo-code!
public sealed class DelegateName : System.MulticastDelegate
{
public DelegateName (object target, uint functionAddress);
public delegateReturnValue Invoke(allDelegateInputRefAndOutParams);
public IAsyncResult BeginInvoke(allDelegateInputRefAndOutParams,
AsyncCallback cb, object state);
public delegateReturnValue EndInvoke(allDelegateRefAndOutParams,
IAsyncResult result);
}
本文详细介绍了C#中委托的工作原理和技术细节。包括委托对象如何维护调用方法的地址、参数及返回值;C#编译器如何为委托类型生成密封类及内部实现的三种编译器生成的方法。
715

被折叠的 条评论
为什么被折叠?



