委托和类一样,是一种用户自定义类型;
类表示的是数据和方法的集合,而委托则持有一个或多个方法;
委托是类型,与类一样,委托类型必须在被用来创建变量以及类型的对象之前声明;
注意:
以delegate关键字开头;
没有方法主体;
委托是引用类型,因此有引用和对象;
方式一:使用带new运算符的对象创建表达式
方式二:快捷方式,方法名称和其相应的委托类型之间存在隐式转换
由于委托是引用类型,通过赋值来改变包含在委托变量中的引用。旧的委托对象就会被垃圾回收器回收
注意:
委托是恒定的,委托对象被创建后就不能再被改变
注意:为委托添加方法的结果,
其实由于委托类型是不可变的,所有为委托的调用列表添加了3个方法后的结果其实是变量指向了一个全新的委托
注意:
如果调用列表中的方法有多个实例,-=运算符将从列表最后开始搜索,并移除第一个与方法匹配的实例;
试图删除委托中不存在的方法没有效果;
试图删除空委托会抛出异常。我们可以通过委托和null进行比较来判断委托的调用列表是否为空。如果调用列表为空,则委托为null
可以像调用方法一样调用委托
注意:
使用参数调用委托就会使用相同的参数值调用它的调用列表中的每一个成员;
如果一个方法在调用列表中出现多次,当委托调用时,每次在列表中遇到这个方法时它都会被调用一次
分析
注意:
调用列表中的最后一个方法返回的值就是委托调用返回的值;
调用列表中所有其他方法的返回值都会被忽略
注意:
如果委托有引用参数,参数值会根据调用列表中的一个或多个方法的返回值而改变;
在调用委托列表中的下一个方法时,参数的新值会传给下一个方法;