详解C#委托与回调函数
来源:互联网 发布:淘宝店如何寻找货源 编辑:程序博客网 时间:2024/06/18 17:39
一、委托
委托是什么呢?这个名字的意思已经赋予了我们想象的空间,你是编程的,你现在正在写一个ASP.NET网页,而JS是你不用起来不是特别的顺手,于是你委托你的一个朋友或者同事来帮助你完成JS部分。这就是委托,把你所不能做的事情交给其他人去做。而怎么知道是哪个人去做呢?当然是要知道名字!而为了区别名字一样的不同人,因此,需要描述一个特征。
在C#中,委托的作用是这样描述的:委托就像一个函数的指针,在程序运行时可以使用它们来调用不同的函数。这个其实和你委托同事完成 JS代码一样。如果有两位同事可以做这件事情,他们只要做的结果能够满足你的需求(就像一个接口),尽管他们做的过程不一样,并且作出的效果也不一样,但是,能够达到你的要求就可以了。
1、简单的委托
那委托需要承载哪些信息呢?首先,它存储了方法名,还有参数列表(方法签名),以及返回的类型。比如:
delegate string/返回类型/ ProcessDelegate(int i);
这就是一个委托的定义。蓝色部分是声明委托的关键字,红色部分是返回的类型,而黑色部分是委托的类型名,和一个类名差不多,而()里的就是参数部分。它的意思是,你要使用这个委托来做事情的话,那么,做事情的方法必须满足以下条件:
1、返回类型和委托的返回类型一致,这里是string类型;
2、能且只能有一个参数,并且是int类型。
* 接下来我们直接上代码来看一下:*
1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 5 namespace TestApp 6 { 7 /// <summary> 8 /// 委托 9 /// </summary>10 /// <param name="s1"></param>11 /// <param name="s2"></param>12 /// <returns></returns>13 public delegate string ProcessDelegate(string s1, string s2);14 15 class Program16 {17 static void Main(string[] args)18 {19 /* 调用方法 */20 ProcessDelegate pd = new ProcessDelegate(new Test().Process);21 Console.WriteLine(pd("Text1", "Text2"));22 }23 }24 25 public class Test26 {27 /// <summary>28 /// 方法29 /// </summary>30 /// <param name="s1"></param>31 /// <param name="s2"></param>32 /// <returns></returns>33 public string Process(string s1,string s2)34 {35 return s1 + s2;36 }37 }38 }
输出的结果是:
Text1Tex2
2、泛型委托
using System;using System.Collections.Generic;using System.Text;namespace TestApp{ /// <summary> /// 委托 /// </summary> /// <param name="s1"></param> /// <param name="s2"></param> /// <returns></returns> public delegate string ProcessDelegate<T,S>(T s1, S s2); class Program { static void Main(string[] args) { /* 调用方法 */ ProcessDelegate<string,int> pd = new ProcessDelegate<string,int>(new Test().Process); Console.WriteLine(pd("Text1", 100)); } } public class Test { /// <summary> /// 方法 /// </summary> /// <param name="s1"></param> /// <param name="s2"></param> /// <returns></returns> public string Process(string s1,int s2) { return s1 + s2; } }}
输出的结果就是:
Text1100
三、回调函数
using System;using System.Collections.Generic;using System.Text;namespace TestApp{ /// <summary> /// 委托 /// </summary> /// <param name="s1"></param> /// <param name="s2"></param> /// <returns></returns> public delegate string ProcessDelegate(string s1, string s2); class Program { static void Main(string[] args) { /* 调用方法 */ Test t = new Test(); string r1 = t.Process("Text1", "Text2", new ProcessDelegate(t.Process1)); string r2 = t.Process("Text1", "Text2", new ProcessDelegate(t.Process2)); string r3 = t.Process("Text1", "Text2", new ProcessDelegate(t.Process3)); Console.WriteLine(r1); Console.WriteLine(r2); Console.WriteLine(r3); } } public class Test { public string Process(string s1,string s2,ProcessDelegate process) { return process(s1, s2); } public string Process1(string s1, string s2) { return s1 + s2; } public string Process2(string s1, string s2) { return s1 + Environment.NewLine + s2; } public string Process3(string s1, string s2) { return s2 + s1; } }}
输出结果:
Text1Text2
Text1
Text2
Text2Text1
阅读全文
1 0
- 详解C#委托与回调函数
- 详解C#委托,事件与回调函数
- 详解C#委托,事件与回调函数
- 详解C#委托,事件与回调函数
- [转载]详解C#委托,事件与回调函数
- [转载]详解C#委托,事件与回调函数
- [转载]详解C#委托,事件与回调函数
- [转载]详解C#委托,事件与回调函数
- 详解C#委托,事件与回调函数
- 详解C#委托,事件与回调函数
- 详解C#委托,事件与回调函数
- 详解C#委托,事件与回调函数
- 详解C#委托,事件与回调函数
- 详解C#委托,事件与回调函数
- 详解C#委托,事件与回调函数
- 详解C#委托,事件与回调函数
- 详解C#委托,事件与回调函数
- 详解C#委托,事件与回调函数
- 机器学习实战:朴素贝叶斯(Naive Bayes)
- AndroidManifest.xml文件解析
- Chapter02 网络(一)
- 51Nod-球与切换器-1293
- poj2352 Stars 线段树单点更新
- 详解C#委托与回调函数
- Java垃圾回收原理
- 用户及组管理
- 二叉树的遍历
- Ascll码表中的数据对应(可用在SQL中)
- OpenResty--改写反向代理页面内容
- ibatis动态多条件查询及模糊查询(oracle,mysql,sql)
- Keepalived+LVS DR模式的集群负载均衡
- oracle 10gRAC安装---oracle RAC