委托
委托是类类型的一种,委托也是一种类。类类型是引用类型的一种。
委托类型其实就是一种方法的包装器、封装器。
为了使程序可以更换要被调用的函数,同时不想让两个函数紧耦合,此时就需要通过委托来进行间接调用、或者可替换的调用。C和C++中通过函数指针来实现,C#中就要通过委托来实现。Java中如果想要实现这个功能必须要使用接口。
委托是一个函数,或者一组函数的封装器、包装器。
函数的封装叫委托。表面看是函数名的传递,其实是函数逻辑的传递、函数体算法的传递。
委托的声明:
声明委托这种类时看上去很像声明函数签名。需要告诉委托类型,在委托类型包裹函数时,能够包裹什么样的函数、委托的实例里面可以包裹什么样的函数。
如果一个委托的实例可以包装某个方法的话:约定:声明委托类型时用的返回值类型、以及参数列表一定要跟被包裹的函数的返回值类型和参数列表一致才可以。函数签名必须相同。

如上图,声明的委托类型,标明需要委托的函数返回值为空,参数列表也要为空。只有符合这种特征的函数才可以被我们这个MyDele类型的委托来委托。

委托的最基本用法
我们写一个符合委托要求的函数:无返回值,无参数列表。
using System;
namespace DelegateExample
{
delegate void MyDele();
class Program
{
static void Main(string[] args)
{
MyDele dele1 = new MyDele(M1); //实例化委托。
}
static void M1()
{
Console.WriteLine("M1 is called!");
}
}
}
此时dele1这个变量引用着一个MyDele类型的实例,这个实例里“包裹”着M1这个方法。

包裹着这样有啥用呢?

本文详细介绍了C#中的委托概念,它作为方法的包装器,允许间接调用或可替换的调用,类似于C++的函数指针。通过实例展示了如何声明、实例化和使用委托,包括多播委托的实现。此外,还讲解了泛型委托、Action和Func的使用,以及Lambda表达式的简洁语法,展示了它们在方法调用和类型推断中的应用。最后提到了LINQ中的查询操作及其与Lambda表达式的结合使用。
最低0.47元/天 解锁文章
2735

被折叠的 条评论
为什么被折叠?



