【转帖】Delegate,Action,Func,匿名方法,匿名委托,事件
http://www.cnblogs.com/yjmyzz/archi...23/1608818.html
一、委托Delegate 一般的方法(Method)中,我们的参数总是string,int,DateTime...这些基本的数据类型(或者没有参数),比如 publicvoid HelloWorld() { Console.WriteLine("Hello World!"); } publicvoid HelloWorld(string name) { Console.WriteLine("Hello ,{0}!", name); } 但是有些时候,我们希望把一个方法本身当做参数传递给另一个方法,比如 myObject.callMethod(HelloWorld); 在没有委托之前,这是一件极困难的事情,委托出现以后,这就是一件很容易的事情了,简单点讲:委托就是一种能把方法当做参数来使用的类型--当然这个定义跟官方的解释比起来极不严密,但易于理解 要点: 1.委托是一种类型(跟string,int,double...一样是.net的一种基本类型) 2.委托的定义必须与最终被调用的方法保持签名一致 比如:下面代码中的 delegate void D1(); 与 static void HelloWorld1(),我们抛开前面的类型关键字delegate与static,他们的签名都是void X() void D2(string myName);与void HelloWorld2(string name); void HelloWorld3(string name);它们的签名格式都是 void X(string Y) 3.委托的好处之一在于可以保持签名格式不变的情况下,动态调用不同的处理逻辑(即不同的方法) 想想系统控件中的Button类,系统并不知道按钮按下去时到底会执行怎么样的逻辑(点击后的处理,每个项目可能都不一样,完全由需求决定),但是 我们知道每个Button都有一个Click(object sender, EventArgs e)这样的东东,没错,就是委托(当然封装成了另一种衍生类型event),就是这种设计保证了统一的格式,不管你实际开发中想如何处理点击后的逻辑,只 要按这个统一的签名来就行了 |
所有的时间均为北京时间。 现在的时间是 12:20 PM. |