目录
委托(Delegate )
为了实现方法的参数化,提出了委托的概念。委托是一种引用方法的类型,即委托是方法的引用,一且为委托分配了方法,委托将与该方法具有完全相同的行为;另外,.NET中为了简化委托方法的定义,提出了匿名方法的概念。
1.什么是委托。
1、委托和类一样,是一种用户自定义类型。委托是持有一个活多个方法的对象。可以把委托看作一组有序的方法列表,调用委托时,其包含的每一个方法都会被执行。
2、C#中的委托(Delegate )是种引用类型,该引用类型与其他引用类型有所不同。在委托对象的引用中存放的不是对数据的引用,而是存放对方法的引用,即在委托的内部包含一个指向某个方法的指针。通过使用委托把方法的引用封装在委托对象中,然后将委托对象传递给调用引用方法的代码。
3、理解图:
2.委托类型的声明语法格式如下。
修饰符 delegate 返回类型 委托名称(参数列表)
1、修饰符是可选项,可以保留,可以删掉;
2、返回类型、关键字delegate和委托名称是必需项;
3、参数列表用来指定委托所匹配的方法的参数列表,所以是可选项。
3.一个与委托类型相匹配的方法必须满足以下两个条件。
▲ 这二者具有相同的签名,即具有相同的参数数目,并且类型相同,顺序相同,参数的修饰符也相同。
▲ 这二者具有相同的返回值类型。委托是方法的类型安全的引用,之所以说委托是安全的,是因为委托和其他所有的C#成员一样,是一种数据类型,并且任何委托对象都是System.Delegate的某个派生类的一个对象。
4.委托的类结构如图。
从图中可以看出,任何自定义委托类型都继承自Syste. Degae类型,并下且该类型封装了许多委托的特性和方法。
5.委托中的方法。
1、委托中的方法具有相同的签名和返回类型。
2、委托保存的方法可以来自任何类或结构,只要方法的签名和返回类型和委托一样。
3、存放在委托中的这一-组有序方法列表称为调用列表。
4、调用列表中的方法可以是实例方法也可以是静态方法。
5、在调用委托时,会执行调用列表中的所有方法。
6.创建委托对象。
1、创建委托变量
MyDel der;//声明委托变量
2、创建委托对象
der = new MyDel(实例方法/静态方法)
7、给委托赋值。
由于委托是引用类型,我们可以用赋值来改变委托变量中的引用。然后旧的变量值会被回收。