“委托是具备相同签名的函数(方法)的类型,事件是委托的应用方式之一” ---来自评论区老司机函数
delegate 是为了在C#中把函数做为对象传来传去而实现的一个“函数包装”。因为在C#中函数是二等公民,你不能把它定义在class的层级上,也不能把它做为对象来传递。所以平台提供了一个盛放函数的“容器“,当你声明了一个这样的容器后,它里面就能够放进全部和你声明时签名一致的函数或方法。
由于每次声明和建立委托都是在作重复性的工做,不符合OOP的气质,微软提供了泛型委托:
Action 无参没有返回值的委托
Action<> 没有返回值的泛型委托
Func<> 有返回值的泛型委托
Predicate<> 返回bool值,一个参数
等价于:public delegate typeA MyDelegate(typeB b,typeC c); MyDelegate thisDelegate = (i,j) => new typeA();
Func<typeB,TypeC,TypeA> thisDelegate = (i,j) => new typeA(); //前两个是参数,最后一个是返回值类型
C#中的event不是一个类型,而是与“字段”、"属性“、”方法“ 并列的类成员之一。能够理解为delegate是一个类,event是delegate类下的一个字段。event是delegate的应用方式之一。
事件是类或对象向其余类或对象通知发生的事情的一种特殊签名的委托。
事件的+=、-=操做符能够在类的外部使用,调用事件只能在声明事件的类的内部使用。