C#委托(Delegate)

在 C# 语言中,委托则委托某个方法来实现具体的功能。
委托是一种引用类型,虽然在定义委托时与方法有些相似,但不能将其称为方法。
委托在使用时遵循三步走的原则,即定义声明委托、实例化委托以及调用委托。 从数据结构来讲,委托是和类一样是一种用户自定义类型。
委托是方法的抽象,它存储的就是一系列具有相同签名和返回回类型的方法的地址。
调用委托的时候,委托包含的所有方法将被执行。
委托是 C# 语言中的一个特色,通常将委托分为命名方法委托、多播委托、匿名委托,其中命名方法
委托是使用最多的一种委托。
C#命名方法委托格式
修饰符 delegate 返回值类型 委托名 ( 参数列表 );
从上面的定义可以看出,委托的定义与方法的定义是相似的。例如定义一个不带参数的委托。
public delegate void MyDelegate();
委托中传递的方法名既可以是静态方法的名称,也可以是实例方法的名称。
需要注意的是,在委托中所写的方法名必须与委托定义时的返回值类型和参数列表相同。 在实例化委托后即可调用委托
在这里,参数列表中传递的参数与委托定义的参数列表相同即可。
若使用静态方法,在向委托中传递方法名时只需要用“类名.方法名”的形式
由于在委托中使用的是实例方法,则需要通过类的实例来调用方法,即使用“new 类名 (). 方法名”的
形式。
除了使用匿名对象的方式调用方法以外,也可以先创建类的实例,再通过类的实例调用方法。
C#多播委托
在 C# 语言中多播委托是指在一个委托中注册多个方法,在注册方法时可以在委托中使用加号运算符
或者减号运算符来实现添加或撤销方法。
在现实生活中,多播委托的实例是随处可见的,例如某点餐的应用程序,既可以预定普通的餐饮也可
以预定蛋糕、鲜花、水果等商品。
在这里委托相当于点餐平台,每一个类型的商品可以理解为在委托上注册的一个方法。
在使用多播委托时需要注意,在委托中注册的方法参数列表必须与委托定义的参数列表相同,否则不
能将方法添加到委托上。
C#匿名委托
在 C# 语言中匿名委托是指使用匿名方法注册在委托上,实际上是在委托中通过定义代码块来实现委
托的作用,
在这里插入图片描述
通过上面 3 个步骤即可完成匿名委托的定义和调用,需要注意的是,在定义匿名委托时代码块结束后
要在 {} 后加上分号。
由于匿名委托并不能很好地实现代码的重用,匿名委托通常适用于实现一些仅需要使用一次委托中代
码的情况,并且代码比较少。


版权声明:本文为weixin_50184145原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。