.net 委托的使用方法以及使用委托的好处
2018-01-03 22:13
232 查看
使用之前先大概了解一下,什么是委托?
从字面意思来理解:我委托某一个人帮我做一件事情,比如,我由于某些原因不能像小红表白,那么我请小明帮我去跟小红表白,那么我请小明帮我表白的这种行为,就叫做委托
A 请求 B 帮我获取或者传递的行为,就叫做委托
委托的声明方法:
无参数,无返回值方法:
给委托赋值的几种方式
//调用委托的方法
noreturn.Invoke()
上面展示的是委托的基本定义于使用方法,现在实际B/S项目中基本摒弃了这种写法,转而使用封装好的泛型委托来使用
使用方法:
下面写几个简单的demo演示一下
下面来调用这个方法,看一下委托的具体使用方法
上面就是一个简单但很常见的委托使用场景
从侧面理解一下这段代码,
我刚开始的时候,对委托的理解觉得很困难,总感觉晕晕的,但是自己没事多练习练习之后,就会很好理解了
上面的demo很好的解释了使用委托的好处
解耦:抽出自定义逻辑,保留相同的逻辑,使代码分离
最大限度的简化代码:解耦的同时,又减少了代码量(自定义逻辑,可以避免相同逻辑的代码重复)
从字面意思来理解:我委托某一个人帮我做一件事情,比如,我由于某些原因不能像小红表白,那么我请小明帮我去跟小红表白,那么我请小明帮我表白的这种行为,就叫做委托
A 请求 B 帮我获取或者传递的行为,就叫做委托
委托的声明方法:
//无返回值无参数委托的定义方法 public delegate void NoReturnPara();
无参数,无返回值方法:
public void DoNothing() { // 没有参数,没有返回值 }
给委托赋值的几种方式
//实例化委托,并传入方法 NoReturbNoPara noreturn = new NoReturbNoPara(this.DoNothing); //LinqToObject NoReturbNoPara noreturn = () => { }; //直接赋值 NoReturbNoPara noreturn = this.DoNothing;
//调用委托的方法
noreturn.Invoke()
上面展示的是委托的基本定义于使用方法,现在实际B/S项目中基本摒弃了这种写法,转而使用封装好的泛型委托来使用
使用方法:
//无返回值,无参数委托,不需要单独声明 Action act = this.DoNothing;
//无返回值,有参数委托,参数类型为泛型 Action<string> act = p => { };
//返回类型为string,参数类型为string的委托 Func<string,string> func = p => p; //返回类型为bool,参数类型为string的委托 Func<string,bool> func = p => p.Equals('');
下面写几个简单的demo演示一下
/// <summary> /// 扩展方法 /// </summary> public static class DelegateExtend { /// <summary> /// 模仿Linq的Where操作 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="scoure">数据源</param> /// <param name="func">委托(自定义bool条件)</param> /// <returns></returns> public static IEnumerable<T> ExtWhere<T>(this IEnumerable<T> scoure, Func<T, bool> func) { //遍历数据源的数据 foreach (var item in scoure) { //请求委托完成条件的筛选返回bool bool bResult = func(item); //把通过筛选提交的数据源,返回出去 if (bResult) { yield return item; } } } }
下面来调用这个方法,看一下委托的具体使用方法
/// <summary> /// 实体模型 /// </summary> public class Student { /// <summary> /// ID /// </summary> public string Id { get; set; } /// <summary> /// 名称 /// </summary> public string Name { get; set; } }
//查询出所有数据 IEnumerable<Student> student = sql.QueryList<Student>(); //定义一个匿名方法,并赋值给委托 Func<Student, bool> func = delegate(Student s) { //自定义代码逻辑,返回bool类型 return s.Id.Equals("1"); }; //传入委托 IEnumerable<Student> list = student.ExtWhere(func); //第二种方法,使用linq语法(自定义逻辑) IEnumerable<Student> list1 = student.ExtWhere(p => p.Id.Equals("1"));
上面就是一个简单但很常见的委托使用场景
从侧面理解一下这段代码,
ExtWhere 是我要做的一件事情,但这件事情里面我需要一个bool类型的返回结果,那么我委托func去帮我获取到这个bool类型的结果
我刚开始的时候,对委托的理解觉得很困难,总感觉晕晕的,但是自己没事多练习练习之后,就会很好理解了
上面的demo很好的解释了使用委托的好处
解耦:抽出自定义逻辑,保留相同的逻辑,使代码分离
最大限度的简化代码:解耦的同时,又减少了代码量(自定义逻辑,可以避免相同逻辑的代码重复)
相关文章推荐
- .net 多播委托的使用方法以及场景,更简单的观察者模式
- ULUA中SPINE动画的切换以及委托的使用方法
- 编程小技巧:使用GDI32函数安装字体,以及.NET中的方法
- appDelegate中的委托协议方法以及使用观察者模式获取其触发方法
- 使用ajax后获取元素的方法以及事件委托的使用
- 什么是网站的任务分析(task analysis)以及其使用方法及好处
- .net学习之多线程、线程死锁、线程通信 生产者消费者模式、委托的简单使用、GDI(图形设计接口)常用的方法
- 关于委托、事件、处理事件的方法以及.NET 续一个实例
- .net学习之多线程、线程死锁、线程通信 生产者消费者模式、委托的简单使用、GDI(图形设计接口)常用的方法
- .net treeview使用方法以及树状结构的应用 4000
- 缓存需要注意的问题以及使用.net正则替换字符串的方法
- window.open使用方法以及参数说明
- ruby中字符串的转码 使用方法以及注意事项
- window.open使用方法以及参数说明
- (转)RSS在.net下面的调用以及使用
- window.open使用方法以及参数说明
- 在VS2005上使用推式(embedded report)水晶报表以及打包部署的方法
- JavaScript---window.open使用方法以及参数说明(完整版)
- .net 中使用Excel library 11.0 COM Workbooks.Open 出现错误:System.MissingMethodException: 找不到方法
- 使用 .NET 对事件进行编程以及VS.NET 2003 有那些新特性