C#中的委托介绍及应用
1、第一步,先打开Visual Studio新建一个控制台程序.
2、我们现在有三个需求:1、将一个字符串数组中每个元素都转换成大写.2、将一个字符串数组中每个元素都转掊测汹权换成小写.3、将一个字符串数组中每个元素两边都加上引号.string[] names = { "abCD", "EFgh", "ijkl" };
3、我们咸犴孜稍先写三个静态函数,把文本数组里面的每一个函数转换成大写,转小写,加冒号. public static void 转大写(string[] na罪焐芡拂me) { for (int i = 0; i < name.Length; i++) { name[i] = name[i].ToUpper(); } } public static void 转小写(string[] name) { for (int i = 0; i < name.Length; i++) { name[i] = name[i].ToLower(); } } public static void 加引号(string[] name) { for (int i = 0; i < name.Length; i++) { name[i] = "\"" + name[i] + "\""; } }
4、我们想把这三个函数写成重载是不可以的,因为它们的参数都是一样的.我们来调用一下,看看效果.
5、三个效果演示完毕,说明我们的函数功能实现完全没有问题.如果我们仔细观察一下刚才写的三个函数,发现,只有循环体里面的那句代码不一样,其他都是一样的.
6、那么这个时候就可以用委托了.我们先来声明一个委托,委托的返回值和参数和刚才那三个函数是一模一样的.public delegate void 超级转转转(string[] name);我们就写到命名空间下面,也就是图片中红色标注的区域.
7、然后,我们声明委托,调用委托,把其中一个函数放入进去.运行程序,可以看到如下结果.
8、当然,我们也可以这么写. 这样写的话会更加简洁.我们不难发现.委托其实就是可以把函数当成一种参数进行传递.是不是有点类似父类可以接收任意的子类,并且可以通过父类来籽疙牢阖调用子类.关键是看传递给父类的是什么子类.使用委托的一个前提是,声明委托的返回值和参数必须要和你放入的函数格式一样.
9、那么,我们再来个更强大的功能.我们再次封装一下代码.发现函数可以当成是另外一个函数的参数来传入使用.这就是委托的强大之处.
10、最后一个代码演示.
11、可是,我直接调用也可以,为什么我要使用委托了?绕一圈,而且感觉代艨位雅剖码非常麻烦!!!搞半天图啥了?图费事谕砣拮卫啊!而且代码量也不见得比以前的方法少啊.那我们现在要开始删除一些代码了,只剩下图片中的代码.我们会发现直接在参数中写代码了.这叫做匿名函数.