既然托付是一个范例(class),那末它就要阅历像类一个先声明,然后new一个对象,末了挪用的历程。
.net 1.x中的托付
在.net 1.x中托付的运用是如许的,以下代码:
1 namespace DelegateDemo 2 { 3 //声明托付 4 public delegate void MyDel(string arg1, string arg2); 5 6 class Program 7 { 8 static void Main(string[] args) 9 {10 //.net 1.x中的托付11 Class1 c1 = new Class1();12 13 //建立托付对象14 MyDel myDel1 = new MyDel(c1.InstanceMethod);//实例要领15 MyDel myDel2 = new MyDel(Class1.StaticMethod);//静态要领16 17 //挪用托付18 myDel1("a", "b");//或许myDel1.Invoke("a", "b");19 myDel2("a", "b");//或许myDel2.Invoke("a", "b");20 21 Console.ReadKey();22 }23 }24 25 public class Class126 {27 public void InstanceMethod(string arg1, string arg2)28 {29 Console.WriteLine(string.Format("arg1:{0},arg2:{1}", arg1, arg2));30 }31 32 public static void StaticMethod(string arg1, string arg2)33 {34 Console.WriteLine(string.Format("arg1:{0},arg2:{1}", arg1, arg2));35 }36 }37 }
从上面代码可以总结:
1,托付既可以接收实例要领,也可以接收静态要领,只需要领的署名和返回值范例与托付婚配即可。
2,挪用托付有两种要领,第1种本质上也是挪用托付的Invoke要领。
赋值托付
上面是运用new DelegateType()的体式格局建立托付的,实在可以运用更简朴的体式格局来建立托付的。上面的建立托付的代码可以简化为:
1 //建立托付对象2 MyDel myDel1 = c1.InstanceMethod;//实例要领3 MyDel myDel2 = Class1.StaticMethod;//静态要领
为托付增添和移除要领
上面的例子,建立托付时只初始化了一个要领,实在托付可以增加多个要领的,增加要领经由过程'+=',移除要领经由过程'-='来完成,以下代码:
1 //建立托付对象2 MyDel myDel = c1.InstanceMethod;3 myDel += c1.InstanceMethod2;4 myDel += Class1.StaticMethod;5 myDel += Class1.StaticMethod2;
1,由多个托付构成的就是链式托付(或称多播托付),System.MulticastDelegate类就是为链式托付而设想的。
2,+=本质上挪用的是Delegate.Combine要领。
挪用托付
挪用托付跟挪用要领一样简朴,只需要传入托付请求的参数,这些参数将用于挪用托付的要领列表中的每个要领,而且是依序次挪用,以下代码:
1 //挪用托付2 myDel("aaa","bbb");
链式托付之所以可以顺次挪用,原因是System.MulticastDelegate内部保护了一个指向下一个托付的指针。
输出效果:
注重:
1,假如为托付增加了多个雷同的要领,那末这些要领都会被反复挪用。
2,假如托付有返值,而且托付的挪用要领列表中包括多个要领,那末只会返回末了一个要领的返回值,别的的返回值都会被疏忽。
末了用XMind来总结一下:
以上就是.net 1.x中的托付实例详解的细致内容,更多请关注ki4网别的相干文章!