一:
1.delcare a delegate:
public delegate void RemoteOperation();
public static void DoSth()
{
Console.WriteLine("DoSth");
Console.ReadLine();
}
2.instantiate a delegate
RemoteOperation function = DoSth;
What done by Compiler automatically?
1)编译器会检查Delegate的Signature,确保正确的赋值。否则报错。
2)生成一个RemoteOperation的类,继承自MultiCastDelegate,如图:
Target:keep the reference of the object who implemented the Method.(如果是静态的Method,Target=null)
Method:keep MethodInfo object for this object.
内部是Delegate Array,支持Mutili-Method implementation.
3.Execute a delegate;
function();//function.Invoke();
调用之后,会依次调用Multi-Method。
foreach (var s in function.GetInvocationList())
{
Console.WriteLine(s.Method);
Console.WriteLine(s.Target);
}
二:Delegate执行可以实现异步调用。
BeginEnvoke/EndInvoke;