扩展、委托、Lambda、linq

1、扩展

扩展是一个很有用的功能。如果你有一个类、不能修改,同时你又想给他加一个方法。这个过程就是扩展。扩展就是扩展方法。

例1:

类People

    public class People
    {
        public string Name { get; set; }
        public int age { get; set; }
    }

增加一个扩展:

1、扩展必须是一个静态的类

2、扩展方法必须是一个静态的方法

3、被扩展的对象必须是前面加 this People people

    public static class extend
    {
        public static string  ToJson(this People people)
        {
            return JsonConvert.SerializeObject(people);
        }
    }

使用扩展:

            ///创建对象
            People people = new People() { Name = "Eleven", age = 30 };
            ///使用扩增的 ToJson
            people.ToJson();
            ///使用扩增的 ToJson
            extend.ToJson(people);

2、委托

委托的本质就是一个函数指针。委托是事件的基础

定义一个委托:

1、委托的定义就是、在方法前面加一个 delegate

2、并且这个方法不用且不能去实现

3、并且委托是一个类型

        /// <summary>
        /// 定义了一个委托
        /// </summary>
        /// <param name="a">参数A</param>
        /// <param name="b">参数B</param>
        /// <returns></returns>
        delegate int Plus(int a, int b);

使用:(多次订阅、可以并行执行)

            ///实现委托
            Plus plus = new Plus(PlusMethods);
            ///并行实现
            plus += PlusMethods2;
            ///并行实现
            plus += PlusMethods3;
            ///执行委托,PlusMethods,PlusMethods2,PlusMethods3 并行执行
            plus.Invoke(1, 2);

实际方法:

        static int PlusMethods(int a, int b)
        {
            Console.WriteLine("PlusMethods:{0},{1}", a, b);
            return a + b;
        }
        static int PlusMethods2(int a, int b)
        {
            Console.WriteLine("PlusMethods2:{0},{1}", a, b);
            return a + b;
        }
        static int PlusMethods3(int a, int b)
        {
            Console.WriteLine("PlusMethods3:{0},{1}", a, b);
            return a + b;
        }

3、Lambda

Lambda实际上就是一个匿名方法进化的语法。

例中,我们看一下,一步一步如何进化。

            ///匿名方法
            Plus plus2 = new Plus(delegate (int a, int b)
            {
                Console.WriteLine("匿名方法{0},{1}", a, b);
                return a + b;

            });
            plus2.Invoke(1, 2);
            ///Lambda方法,就是把 delegate 去掉,在中间加了一个 => 符号
            Plus plus3 = new Plus((int a, int b) =>
            {
                Console.WriteLine("匿名方法{0},{1}", a, b);
                return a + b;

            });
            plus3.Invoke(1, 2);
            ///Lambda方法,把 new Plus() 也去掉了
            Plus plus4 = (int a, int b) =>
            {
                Console.WriteLine("匿名方法{0},{1}", a, b);
                return a + b;

            };
            plus4.Invoke(1, 2);

Lambda 3个组成结构,参数:()  中间符=> 实体{}

4、linq

linq 就是微软把SQL语法搬到了C#代码中

对于集合的查询还是很有帮助的。

详细LINQ参考:

https://msdn.microsoft.com/zh-cn/library/bb397676.aspx

时间: 2024-12-20 11:59:29

扩展、委托、Lambda、linq的相关文章

个人总结:匿名委托+内置委托+Lambda表达式

匿名委托+内置委托+Lambda表达式 概要 在实际开发中,项目开发框架不同,用到的技术是不一样的,这里总结一下用Linq开发,ORM之EF开发会大量使用的Lambda表达式; 正文 之前提过.Net有一套扩展在IEumberable<T>泛型接口的扩展方法,本文是从这个基础继续总结; 1.void Action<in T>: 先拿一个ForEach()来讲: public void ForEach(Action<T> action); 这个Action<T>

[MVC4]ASP.NET MVC4+EF5(Lambda/Linq)读取数据

继续上一节初始ASP.NET MVC4,继续深入学习,感受了一下微软的MVC4+EF5(EntityFramework5)框架的强大,能够高效的开发出网站应用开发系统,下面就看一下如何用MVC4+EF5来实现数据的读取. 实现效果 操作步骤 1.创建数据库 --创建表格-- Create table News ( id int identity(1,1) primary key, NewsTitle varchar(100)not null, CreateTime Datetime, Conte

【LINQ技术】扩展特性和LINQ操作符

LINQ特有的编程结构 LINQ就像是嵌入到C#中的强类型查询语言,尽管和SQL查询很像,但语法却并不相同,甚至还有截然相反的一面. LINQ是在.NET发展到3.5版的时候被引进的,C#和VB语言都为此做了许多工作,扩展了大量新的编程结构. 一.隐式类型本地变量 var--一个如此小巧的关键字却有着强大的力量. var varInt=1; var varBool=True; var varString="String, String, String"; Console.WriteLi

几种查询方法(lambda Linq Enumerable静态类方式)

1.需要一个数据源类: using System; using System.Collections.Generic; namespace Linq { public class Student { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } public class Data { public static List<Student> studentLi

扩展方法以及LinQ的学习

我们今天学习的内容其实还是蛮多的,学习了自动属性,扩展方法,复习初始化器,以及LinQ的一些方法,其实感觉有些还是很熟悉的,在前面的学习过程中有时间感觉学习的知识知道了怎么使用,但是还没有在项目中使用,做的习题似乎意义不大,现在依旧如此,感觉仅限于知道怎样使用.很想做一个小小的项目来熟悉下学习的知识...下面就总结下今天学习的内容. 一.自动属性 private int productid; public int Productid { get { return productid; } set

委托、Linq学习

委托是一种类型,可以实例化. 常用泛型委托. new Predicate<T>(函数名) ,,必须要有一个输入参数,只能有一个参数,并且需要返回bool类型. new Action<T,T..>(函数名),可以有0-16个输入参数,不能有返回值. new Func<T,T...>(函数名),可以有0-16个输入参数,最后加一个参数标示返回的值的类型,必须有返回值. 匿名函数: var s1 = new Predicate<string>(delegate(s

委托 lambda表达式浅显理解

方法不能跟变量一样当参数传递,怎么办,C#定义了委托,就可以把方法当变量一样传递了,为了简单,匿名方法传递,省得再声明方法了:再简单,lambda表达式传递,比匿名方法更直观. public delegate int delegateArithmetic(int a, int b); //委托作为参数,方法传递给委托 public int result(int x,int y,delegateArithmetic delAri) { return delAri(x, y); } public i

net2.0实现net3.5特性,如扩展方法,Linq等

差不多两年没碰net了,今天想做个小工具,于是打开了久违的VS2012,由于客户终端还是winxp时代,而且是net2.0,且升级存在限制,因此必需在2.0下开发,之前的常用库是3.5写的,而且因为3.5的扩展,linq等非常快速便捷,因此写起2.0来很别扭,网上查了查,居然找到一个很简便的办法,特地记下来: 1.直接把net3.5里的System.Core.dll添加到2.0项目中(引用),属性中"特定版本"设置为false 2.代码中using System.Linq; 快乐的玩耍

Objective-c 05 类别 类扩展 委托 非正式协议 协议 代码块 并发性 队列

类别 为已经存在的类添加行为时,通常采用创建子类的方法,不过有时子类并不方便, 比如:创建NSString的子类,但是NSString实际上只是一个类簇的表面形式.因而为这样的类创建子类会非常困难.在其他情况下, 也许可以创建它的子类,但是用到的工具集和库无法帮你处理新类的对象的.例如:当使用stringWithFormat:类方法生成新字符串时,你创建的 NSString类的新子类就无法返回.   利用Objective-C的动态运行时分配机制,可以为现有的类添加新的方法.这些新的方法在Obj

lambda linq 表达式 ListBox 的升序 降序 乱序

2020年1月9日 17:50:55 附件 https://files.cnblogs.com/files/xe2011/ListBoxSort.rar 这种方法 如果内容足够多就能看到滚动条闪烁了,我觉得这是列表框清除内容,再添加内容引起的. 用不删除列表,重新赋值的方法能解释闪烁,但过程时间又太长. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; u