在最近的项目中有使用待委托,好久没用过了也有点生疏。因此打算写个博客记录一下。
1、什么是委托
学过c++语言的同学应该都很熟悉指针,那么委托就相当于c#中的指针。但是在c++中,函数指针只不过是一个指向内存位置的指针,它不是类型安全的。我们无法判断这个指针实际指向什么,像参数和类型就更无从知晓。但是.NET的委托完全不同,委托是类型安全的类,它定义了返回类型和参数类型。委托类不仅包含对方法的引用,也可以包含对多个方法的引用。
当要把一个方法传递给其他方法时,就需要用到委托。在过去我们习惯将数据作为参数传递给方法,但是现在要将方法传递给方法。
在c和c++中,只能提取函数的地址,并作为一个参数传递它。c没有类型安全。可以把任何函数传递给需要函数指针的方法。但是这种直接方法不仅会导致一些关于类型安全的问题,而且没有意识到:在进行面向对象编程时,几乎没有方法是孤立存在的,而是在调用方法之前通常需要与类实例相关联。所以在.NET在语法上不允许使用这种直接方法。如果要传递方法,就必须把方法的细节封装在一种新类型的对象中,即委托。委托只是一种特殊类型的对象,起特殊之处在于,我们之前定义的所有对象都包含数据,而委托包含的只是一个或多个方法。
a、声明委托
定义一个委托
delegate void IntMethodInvoker(int x);
在这个实例中,定义了一个委托IntMethodInvoker,并指定该委托的每个实例都可以包含一个方法的引用,该方法带有一个int参数,并返回void。理解委托的一个要点就是它们的类型安全性非常高。在定义委托时,必须给出它所表示的方法的签名和返回类型等细节。