网站logo也叫做网站的,不懂网站建设 如何找建站公司,网站建设服务费的税率,重庆那里做网站外包好一.委托
1.委托概述#xff1a;
#xff08;1#xff09;声明一个委托类型。委托声明看上去和方法声明相似#xff0c;只是没有实现块。 #xff08;2#xff09;使用该委托类型声明一个委托变量 #xff08;3#xff09;创建委托类型的对象#xff0c;把它赋值给委…一.委托
1.委托概述
1声明一个委托类型。委托声明看上去和方法声明相似只是没有实现块。 2使用该委托类型声明一个委托变量 3创建委托类型的对象把它赋值给委托变量。新的委托对象包括指向某个方法的引用这个方法和第一步定义的签名和返回类型一致。 4选择为委托对象增加其他方法这些方法必须与第一步中定义的委托类型有相同的签名和返回类型。这些方法可以来自于任何类或结构 5调用委托像调用方法一样调用委托在调用委托的时候其包含的每一个方法都会被执行。
2.声明委托类型
[访问修饰] delegate void MyDel (int x);// 访问修饰符 关键字 返回类型 委托类型名 签名返回类型和签名指定了委托接受的方法的形式例如上面的声明指定了MyDel类型的委托只接受没有返回值并且有单个int参数的方法。 注意点 1以delegate关键字开头 2没有方法主体 3委托是类型与class同级所以可定义在类外。
3.创建委托对象
委托类型的变量的声明
MyDel delVar;//委托类型 变量创建委托对象的两种方式
(1)使用new运算符创建委托对象new运算符的操作数组成如下 委托类型名 一对圆括号其中包含作为调用列表中第一个成员的方法的名字。方法可以是实例方法也可以是静态方法。 注释可以把delegate看做一个包含有序方法列表的对象这些方法具有相同的签名和返回类型。方法的列表称为调用列表。 注意点调用列表中的方法可以是实例方法也可以是静态方法。 在调用委托的时候会执行调用列表中的所有方法。
//创建委托并保存引用
delVarnew MyDel(myInstObj.MyM1);//这里是实例方法
//创建委托并保存引用
dVarnew MyDel(SClass.OtherM2);//这里是静态方法2仅有方法名构成。
delVarmyInstObj.MyM1;//创建委托并保存引用
dVarSClass.OtherM2;//创建委托并保存引用还可以使用初始化语法在同一条语句中创建变量和初始化对象。
MyDel delVarnew MyDel(myInstObj.MyM1);
MyDeldVarnew MyDel(SClass.OtherM2);或者
MyDel delVarmyInstObj.MyM1;
MyDeldVarSClass.OtherM2;4.组合委托
MyDel delAmyInstObj.MyM1;
MyDel delBSClass.OtherM2;
MyDel delCdelAdelB;//组合调用列表第三个是组合委托委托是恒定的。委托对象被创建后不能再被改变
5.为委托添加方法
为委托添加方法使用“”运算符如下代码为委托的调用列表“增加”了两个方法方法加在了调用列表的底部。
MyDel delVarmyInstObj.MyM1;//创建并初始化
delVarSCL.m3;//增加方法
delVarX.Act;//增加方法使用“”运算符实际发生的是创建了一个新委托。
6.从委托移除方法
使用“-”运算符从委托移除方法实际发生的也是创建了一个新委托。
delVar-X.Act;//增加方法注意事项 如果再调用列表中的方法有多个实例-运算符将从列表最后开始搜索并且移除第一个与方法匹配的实例 试图删除委托中不存在的方法没有效果 试图调用空委托会抛出异常可以通过把委托和null进行比较来判断委托的调用列表是否为空。如果调用列表为空则委托是null.
7.调用委托
像调用方法一样简单地调用委托。如果一个方法在调用列表中出现多次当委托被调用时每次在列表中遇到这个方法时它都会被调用一次。
调用带返回值的委托如果委托有返回值并且在调用列表中有一个以上的方法会发生下面的情况 调用列表中最后一个方法返回的值就是委托调用返回的值 调用列表中所有其他方法的返回值都会被忽略