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. 100个常用的Linux命令——转载

    1,echo “aa” > test.txt 和 echo “bb” >> test.txt //>将原文件清空,并且内容写入到文件中,>>将内容放到文件的尾部 2 ...

  2. Centos 7升级内核

    检查当前 CentOS 系统内核版本 uname -sr 在 CentOS 7 上启用 ELRepo 仓库 rpm --import https://www.elrepo.org/RPM-GPG-KE ...

  3. windows环境安装zabbix客户端

    安装windows版zabbix客户端 一.下载客户端 在数据盘新建一个zabbix_agent目录 浏览器打开 https://www.zabbix.com/download_agents 选择”z ...

  4. windows 下 wamp php单元测试工具PHPUnit的安装

    phpunit下载网站 http://www.phpunit.cn/ 一.安装PHPUnit 1.选择版本 我用的是php版本是5.6.25 所以我选择的是PHPUnit 5.7 2.安装过程 为 P ...

  5. cf-Global Round2-C. Ramesses and Corner Inversion(思维)

    题目链接:http://codeforces.com/contest/1119/problem/C 题意:给两个同型的由0.1组成的矩阵A.B,问A能否经过指定的操作变成B,指定操作为在矩阵A中选定一 ...

  6. 第十一章 串 (b1)串匹配

  7. 第二章 向量(d3)有序向量:Fibonacci查找

  8. WAS 常见报错

    1) An error occurred while deleting the server. ADMG0011E: An unexpected exception occurred com.ibm. ...

  9. Codeforces Beta Round #70 (Div. 2)

    Codeforces Beta Round #70 (Div. 2) http://codeforces.com/contest/78 A #include<bits/stdc++.h> ...

  10. java初学网站

    http://www.jfinal.com/doc http://www.w3school.com.cn/