1.委托
C# 中的委托类似于 C 或 C++ 中函数的指针。
委托是存有对某个方法的引用的一种引用类型变量,引用可在运行时被改变。
委托特别用于实现事件和回调方法。
委托声明决定了可由该委托引用的方法。
委托可指向一个与其具有相同标签的方法。
委托的多播
委托对象可使用 “+” 运算符进行合并。一个合并委托调用它所合并的两个委托。只有相同类型的委托可被合并。
“-” 运算符可用于从合并的委托中移除组件委托。
使用委托的这个有用的特点,您可以创建一个委托被调用时要调用的方法的调用列表。
2.事件
C# 事件是一种成员,用于将特定的事件通知发送给订阅者。事件通常用于实现观察者模式,它允许一个对象将状态的变化通知其他对象,而不需要知道这些对象的细节。
C# 中使用事件机制实现线程间的通信。
3.委托与事件的区别
委托 是一种数据类型,用于定义方法的引用,可以直接创建、调用和修改。
事件 是基于委托的封装,提供了一种发布-订阅机制,让对象可以订阅特定事件并在事件触发时执行处理代码。
4.泛型委托
与delegate声明相比的优点
• 简化了无返回值的方法的定义和使用。
• 可以省略委托类型的显式定义。
Action
是一个泛型委托,用于表示一个没有返回值的方法。它最多可以有16个参数,但不能有返回值。
用于简化委托的使用,特别是当你需要传递无返回值的方法时。
// 使用 Action
Action<string> action = message => Console.WriteLine(message);
action("Hello, World!");
Func
是一个泛型委托,用于表示一个有返回值的方法。它最多可以有16个参数,最后一个泛型参数表示返回值类型,其他泛型参数表示方法的参数类型。
// 使用 Func
Func<int, int, int> add = (a, b) => a + b;
int result = add(3, 4); // result = 76
5.总结
• delegate: 是一种自定义的委托类型,灵活但需要显式定义,可以用于任何类型的委托,包括有返回值和无返回值的方法。
• Action: 是一个内置的泛型委托,用于表示无返回值的方法,最多支持16个参数,简化了对无返回值方法的定义。
• Func: 是一个内置的泛型委托,用于表示有返回值的方法,最多支持16个参数,简化了对有返回值方法的定义。
Action 和 Func 提供了一种更简洁的方式来定义和使用委托,特别是在常见的场景中,如事件处理和 LINQ 查询。