.net 委托的使用方法以及使用委托的好处

liuqiwang 2018-01-03 原文

.net 委托的使用方法以及使用委托的好处

使用方法:

//无返回值无参数委托的定义方法
public delegate void NoReturnPara();

给委托赋值的几种方式

//实例化委托,并传入方法
NoReturbNoPara noreturn = new NoReturbNoPara(this.DoNothing);
//LinqToObject
NoReturbNoPara noreturn = () => { };
//直接赋值
NoReturbNoPara noreturn = this.DoNothing;

//调用委托的方法

noreturn.Invoke()

上面展示的是委托的基本定义于使用方法,在mvc中基本摒弃了这种写法,转而使用封装好的泛型委托来使用

使用方法:

//无返回值,无参数委托,不需要单独声明
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"));

上面就是一个简单但很常见的委托使用场景

我刚开始的时候,对委托的理解觉得很困难,总感觉晕晕的,但是自己没事多练习练习之后,就会很好理解了

下面总结一下使用委托的好处

解耦:抽出自定义逻辑,保留相同的逻辑,使代码分离

最大限度的简化代码:解耦的同时,又减少了代码量

发表于 2018-01-03 22:13 隐于深巷丶 阅读() 评论() 编辑 收藏

 

版权声明:本文为liuqiwang原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/liuqiwang/p/8186007.html

.net 委托的使用方法以及使用委托的好处的更多相关文章

  1. C#委托与事件–简单笔记

    委托 简单记录点东西 适合似懂非懂的朋友看看 委托类型用来定义和响应应用程序中的回调。 借此可以设计各种有面向 […]...

  2. C# WPF 通过委托实现多窗口间的传值

    C# WPF 通过委托实现多窗口间的传值 在使用WPF开发的时候就不免会遇到需要两个窗口间进行传值操作,当然多 […]...

  3. 【UE4 C++ 基础知识】 Delegate 委托

    概念 定义 UE4中的delegate(委托)常用于解耦不同对象之间的关联:委托的触发者不与监听者有直接关联, […]...

  4. 多线程、委托、Invoke解决winform界面卡死的问题,并带开关

    一、知识点介绍 1,更新控件的内容,应该调用控件的Invoke方法。 Invoke指: 在拥有控件的基础窗口句 […]...

  5. C# 委托

    C#图解教程,第四版,第十三章,委托,学习笔记   可以认为委托是持有一个或多个方法的对象。 但委托与典型的对 […]...

  6. 泛型学习笔记

    泛型的好处:类型安全性能高,代码重用扩展好。 泛型的使用:如果我们需要使用多个泛型来实例化一个类型,那么我们就 […]...

  7. C#的兰姆达表达式与委托配合使用时的一些问题

    C#的兰姆达表达式与委托配合使用时的一些问题 大家应该都是知道,C#的委托+=和-=都是根据函数的签名来识别的 […]...

  8. C# 委托(Delegate)

    什么是委托 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋 […]...

随机推荐

  1. DotNet 网上资源 – Richard

    DotNet 网上资源 DotNet 网上资源 相关网站列表 http://blog.joycode.com/ […]...

  2. Mysql 添加字段 修改字段 删除字段

    1、表 添加字段(字段类型、长度、默认值、注释) ALTER TABLE 表名 ADD 字段名 字段类型(字段 […]...

  3. 智能计算与优化方法——学习笔记摘要

    参考书籍:王永骥老师的课件和汪定伟《智能优化方法》2007年 一、传统优化方法的特点与缺陷: 1. 一个初始点 […]...

  4. 我为什么要写作

    思考 首先对这方面的知识比较欠缺,看了许多大佬的从入门到放弃的教程。 发现其实看一遍下来,我都懂。。。可是实际 […]...

  5. 英特尔CPU详细参数表(新老CPU详细对照表)

    随着笔记本的快速升级换代,琳琅满目的CPU搞得大家眼花缭乱,找了一些相关资料帮助大家了解一下新老CPU的规格! […]...

  6. 如何简单的在 ASP.NET Core 中集成 JWT 认证?

    前情提要:ASP.NET Core 使用 JWT 搭建分布式无状态身份验证系统 文章超长预警(1万字以上),不 […]...

  7. vue学习04 v-on指令

    vue学习04 v-on指令 v-on的作用是为元素绑定事件,比如click单击,dbclick双击 v-on […]...

  8. 怎么安装Scrapy框架以及安装时出现的一系列错误(win7 64位 python3 pycharm)

    因为要学习爬虫,就打算安装Scrapy框架,以下是我安装该模块的步骤,适合于刚入门的小白: 一、打开pycha […]...

展开目录

目录导航