2021-08-29

											委托

一、委托的概述
委托从字面上理解就是一种代理,类似于房屋中介,由租房委托中介为其租赁房屋。
在c#语言中,委托则委托某个方法来实现具体功能。
委托的特点:
1.委托是引用类型,虽然在定义委托时与方法有些相似,但不能将其称为方法。
2.从数据结构来讲,委托是和类一样是一种用户自定义类型。
3.委托是方法的抽象,它存储的就是一系列具有相同签名和返回回类型的方法的地址。
4.调用委托的时候,委托包含的所有方法将被执行。
委托的分类:
方法委托
多播委托
匿名委托
委托的使用步骤:
1.定义声明委托
2.实例化委托
3.调用委托
二、方法委托
方法委托是最常用的一种委托 ,其定义的语法形式如下:

修饰符 delegate 返回值类型 委托名 ( 参数列表 )

1.定义声明委托
从上面的定义可以看出,委托的定义与方法的定义是相似的。例如定义一个不带参数的委托代码如下:
public delegate void MyDelegate();
2.实例化委托
在定义好委托后就到了实例化委托的步骤,命名方法委托在实例化委托时必须带入方法的具体名称。
实例化委托的语法形式如下:
委托名 委托对象名 = new 委托名 ( 方法名 );
委托中传递的方法名既可以是静态名称,也可以是实例方法的名称。
需要注意的是,在方法委托中所写的方法名必须与委托定义时的返回值类型和参数列表相同。
3.调用委托
在实例化委托后即可调用委托,语法形式如下:
委托对象名 ( 参数列表 );
在这里,参数列表中传递的参数与委托定义的参数列表相同即可。
public void ShowInfo(string info){
Console.WriteLine("{0}:\n{1}", info,this.ToString())
}
class Program{

//定义委托
public delegate void TestDelegate(string info);
static void Main(string[] atgs){
    Student stu=new Student(1,"张三",18);
    //创建委托,stu对象的Showfo方法交由委托testDel去执行
    TestDelegate testDel=new TestDelegate(stu,ShowInfo);
    //调用委托
    testDel("委托测试");
}

}
三、多播委托
在c#语言中多播委托是指在一个委托中注册多个方法,在注册方法时可以在委托中使用加号运算符或者剑豪运算符来实现添加或撤销
比如上面中的testDel委托中只有一个方法。那么可以通过加号运算符或者剑豪运算符来继续添加委托方法,那么当委托执行的时候,所有委托的方法都会被执行。
举例如下:
新增两个学生类,并将ShowInfo方法委托给testDel.
举例如下:
新增两个学生类,并将其ShowInfo方法委托给testDel。
修改Program类:
class Program{

//1.定义委托
public delegate void TestDelegate(string info);
static void Main(string[] args){
    Student stu=new Student(1,"张三",18);
    Student stu1=new Student(2,"李四",20);
    Student stu2=new Student(3,"王五",28);
    //创建委托
    TestDelegate testDel=new TestDelegate(stu.ShowInfo);
    //添加委托方法
    testDel+=stu1.ShowInfo;
    testDel+=stu2.ShowInfo;
    //调用委托
    testDel("委托测试");
    //去除委托方法
    testDel-=syu.ShowInfo;
    //调用委托
    testDel("去除Stu2的委托测试");
}

}
注意:
在使用多播委托时需要注意,在委托中注册的方法参数列表必须与委托定义的参数列表相同,否则不能将方法添加到委托上
四、匿名委托
在c#语言中匿名委托是指使用匿名方法注册在委托上,实际是在委托中通过定义代码块来实现委托的作用。
具体的语法形式如下:
//1定义委托
修饰符 delegate 返回值类型 委托名(参数列表);
//2.定义匿名委托
委托名 委托对象=delegate{
//代码块
}
//3.调用匿名委托
委托对象名(参数列表)
通过上面三个步骤即可完成匿名委托的定义和调用,需要注意的是,在定义匿名委托时代码块结束后要在{}后加上分号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值