委托实现来类型安全的回调方法。由于回调无处不在,所以委托无处不在,时间模型是建立在委托机制上,Lambda表达式本质上就是一种匿名委托。
委托的定义(委托并不等于方法):
你是编程的,你现在正在写一个ASP.NET网页,而JS是你不熟悉的,于是你委托你的一位同事来帮助你完成JS部分。这就是委托,把你所不能做的事情交给其他人去做。而怎么知道是哪个人去做呢?当然是要知道名字!而为了区别名字一样的不同人,因此,需要描述一个特征。
· public delegate string ProcessDelegate(string s1, string s2);
class Program
{
static void Main(string[] args)
{
/* 调用方法 */
ProcessDelegate pd = new ProcessDelegate(new Test().Process);
Console.WriteLine(pd("Text1", "Text2"));
}
}
public class Test
{
/// <summary>
/// 方法
/// </summary>
/// <param name="s1"></param>
/// <param name="s2"></param>
/// <returns></returns>
public string Process(string s1,string s2)
{
return s1 + s2;
}
}·
多播委托和委托链,以+=和-=操作符分别进行绑定和解除绑定的绑定。多播委托返回值一般为void,委托类型为非void类型
事件:事件是对委托的封装,从委托的示例中可知,在客户端可以随意对委托进行操作,一定程度上破坏来面向的对象的封装机制,因此时间实现来对委托的封装。
Lambda,匿名函数,事件的详解在之后再讨论。