委托
委托是一种引用类型,虽然在定义委托时与方法有些相似,但不能将其称为方法。委托在使用时遵循三步走的原则,即定义声明委托、实例化委托以及调用委托。
委托是方法的抽象,它存储的就是一系列具有相同签名和返回回类型的方法的地址。调用委托的时候,委托包含的所有方法将被执行。
委托是 C# 语言中的一个特色,通常将委托分为命名方法委托、多播委托、匿名委托。
一、命名方法委托
(1)中命名方法委托是最常用的一种委托,委托的定义与方法的定义是相似的,其语法形式为:
修饰符 delegate 返回值类型 委托名 ( 参数列表 );
在定义好委托后就到了实例化委托的步骤,命名方法委托在实例化委托时必须带入方法的具体名称。
(2)实例化委托的语法形式如下:
委托名 委托对象名 = new 委托名 (方法名 );
委托中传递的方法名既可以是静态方法的名称,也可以是实例方法的名称。
需要注意的是,在委托中所写的方法名必须与委托定义时的返回值类型和参数列表相同。
二、多播委托
多播委托是指在一个委托中注册多个方法,在注册方法时可以在委托中使用加号运算符或者减号运算符来实现添加或撤销方法。在使用多播委托时需要注意,在委托中注册的方法参数列表必须与委托定义的参数列表相同,否则不能将方法添加到委托上。
三、匿名委托
匿名委托是指使用匿名方法注册在委托上,实际上是在委托中通过定义代码块来实现委
托的作用。具体的语法形式如下:
- 定义委托: 修饰符 delegate 返回值类型 委托名 ( 参数列表 );
- 定义匿名委托: 委托名 委托对象 = delegate { //代码块 };
- 调用匿名委托: 委托对象名 ( 参数列表 );
3 个步骤即可完成匿名委托的定义和调用,需要注意的是,在定义匿名委托时代码块结束后
要在 {} 后加上分号。
由于匿名委托并不能很好地实现代码的重用,匿名委托通常适用于实现一些仅需要使用一次委托中代码的情况,并且代码比较少。