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 = };
///使用扩增的 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(, );

实际方法:

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

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

4、linq

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

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

            IEnumerable<People> listSearch = from i in peopleList
where i.age >
select i;

详细LINQ参考:

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

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

  1. 委托发展史(Linq操作符)

    嗯~这篇就讲讲Linq吧! 之前讲过Lambda最后进化到了令人发指的地步: Func<string, int> returnLength; returnLength = text =&g ...

  2. linq本质扩展方法+lambda表达式

    string[] names = { "aa","bb","cc","dd"}; /* IEnumerable<s ...

  3. C# Lambda && Linq

    Lambda表达式在C#3.0加入,它是一个匿名函数,可用于创建委托或者表达式树类型,运算符为=>,读作"goes to",=>左侧是变量,右侧是表达式,变量类型可以自 ...

  4. 普通委托到泛型委托到Linq

    private delegate bool delTest(int a); private void button1_Click(object sender, EventArgs e) { var a ...

  5. Unity C# 多态 委托 事件 匿名委托 Lambda表达式 观察者模式 .NET 框架中的委托和事件

    一.多态 里氏替换原则: 任何能用基类的地方,可以用子类代替,反过来不行.子类能够在基类的基础上增加新的行为.面向对象设计的基本原则之一. 开放封闭原则: 对扩展开放,意味着有新的需求或变化时,可以对 ...

  6. 扩展方法以及LinQ的学习

    我们今天学习的内容其实还是蛮多的,学习了自动属性,扩展方法,复习初始化器,以及LinQ的一些方法,其实感觉有些还是很熟悉的,在前面的学习过程中有时间感觉学习的知识知道了怎么使用,但是还没有在项目中使用 ...

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

    1.需要一个数据源类: using System; using System.Collections.Generic; namespace Linq { public class Student { ...

  8. 委托+内置委托方法+多播委托+lambda表达式+事件

    委托概念:如果我们要把方法当做参数来传递的话,就要用到委托.简单来说委托是一个类型,这个类型可以赋值一个方法的引用. 声明委托: 在C#中使用一个类分两个阶段,首选定义这个类,告诉编译器这个类由什么字 ...

  9. C#-委托 lambda 匿名方法 匿名类型

    1.lambda 匿名方法 匿名类型 delegate void d1(); d1 d = delegate(){Console.WriteLine("this is a test" ...

  10. C#编程 委托 Lambda表达式和事件

    委托 如果我们要把方法当做参数来传递的话,就要用到委托.简单来说委托是一个类型,这个类型可以赋值一个方法的引用. 声明委托 在C#中使用一个类分两个阶段,首选定义这个类,告诉编译器这个类由什么字段和方 ...

随机推荐

  1. linux目录结构详解(以suse linux 10为例)

    一.文件系统结构 位于Linux系统的最顶端即根目录是/.Linux的文件系统的入口就是/,所有的目录.文件.设备都在/之下,/就是Linux文件系统的组织者,也是最上级的领导者. 它之下的子目录有: ...

  2. 电子表格Excel

    电子表格Excel 本次课内容一.认识下Excel1.扩展名 office2007以前,扩展名是xls office2007,扩展名是xlsx 2.文件扩展名是xls或xlsx的文件,excel电子表 ...

  3. git初使用总结感悟

    ####首先说说git在工作中的一般流程1.首先就是进入新公司之后,要了解公司用的是什么代码托管,比如gitlab或者github(私有库花钱) 2.找技术同时把你加入到工作项目组并给你权限(一般都是 ...

  4. Linux下修改tab建为4个空格

    1.编辑 vim /etc/vim/vimrc 2.修改 set ts=4 set expandtab set autoindent 其实只要set ts=4 就ok了.

  5. bootstrap 固定表头

    1 htmL <!DOCTYPE html> <html> <head> <title>Fixed Columns</title> < ...

  6. 八、AbstractFactory 抽象工厂模式

    设计原理: 代码清单: 抽象 Factory : public abstract class Factory { public static Factory getFactory(String cla ...

  7. as3.0视频的快进有拖动条

    package com{ import flash.display.MovieClip; import flash.events.MouseEvent; import fl.video.FLVPlay ...

  8. c++面向行的输入getline()和get()

    来源:c++ primer plus 在c++里当我们输入一个字符串时习惯用cin,但是cin只能读取一段不含空格的字符串,如果我们需要读取一段包含空格的字符串时,就需要用到getline()或get ...

  9. unity填色绘画游戏Drawing Coloring Extra Edition

    . 下载地址: https://item.taobao.com/item.htm?spm=0.7095261.0.0.2e611debLdF3mf&id=576153069662

  10. Node使用 Express框架,实现文件上传

    一 安装依赖包 npm install multer --save 二 客户端上传文件 <!DOCTYPE html> <html> <head> <meta ...