扩展、委托、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 = };
///使用扩增的 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的更多相关文章
- 委托发展史(Linq操作符)
嗯~这篇就讲讲Linq吧! 之前讲过Lambda最后进化到了令人发指的地步: Func<string, int> returnLength; returnLength = text =&g ...
- linq本质扩展方法+lambda表达式
string[] names = { "aa","bb","cc","dd"}; /* IEnumerable<s ...
- C# Lambda && Linq
Lambda表达式在C#3.0加入,它是一个匿名函数,可用于创建委托或者表达式树类型,运算符为=>,读作"goes to",=>左侧是变量,右侧是表达式,变量类型可以自 ...
- 普通委托到泛型委托到Linq
private delegate bool delTest(int a); private void button1_Click(object sender, EventArgs e) { var a ...
- Unity C# 多态 委托 事件 匿名委托 Lambda表达式 观察者模式 .NET 框架中的委托和事件
一.多态 里氏替换原则: 任何能用基类的地方,可以用子类代替,反过来不行.子类能够在基类的基础上增加新的行为.面向对象设计的基本原则之一. 开放封闭原则: 对扩展开放,意味着有新的需求或变化时,可以对 ...
- 扩展方法以及LinQ的学习
我们今天学习的内容其实还是蛮多的,学习了自动属性,扩展方法,复习初始化器,以及LinQ的一些方法,其实感觉有些还是很熟悉的,在前面的学习过程中有时间感觉学习的知识知道了怎么使用,但是还没有在项目中使用 ...
- 几种查询方法(lambda Linq Enumerable静态类方式)
1.需要一个数据源类: using System; using System.Collections.Generic; namespace Linq { public class Student { ...
- 委托+内置委托方法+多播委托+lambda表达式+事件
委托概念:如果我们要把方法当做参数来传递的话,就要用到委托.简单来说委托是一个类型,这个类型可以赋值一个方法的引用. 声明委托: 在C#中使用一个类分两个阶段,首选定义这个类,告诉编译器这个类由什么字 ...
- C#-委托 lambda 匿名方法 匿名类型
1.lambda 匿名方法 匿名类型 delegate void d1(); d1 d = delegate(){Console.WriteLine("this is a test" ...
- C#编程 委托 Lambda表达式和事件
委托 如果我们要把方法当做参数来传递的话,就要用到委托.简单来说委托是一个类型,这个类型可以赋值一个方法的引用. 声明委托 在C#中使用一个类分两个阶段,首选定义这个类,告诉编译器这个类由什么字段和方 ...
随机推荐
- 28.注解2.md
目录 1. 特点 2.优点 3. 源注解-部分 4.自定义注解 5.使用注解获 1. 特点 注释:给程序员阅读使用 注解:给编译器阅读使用 2.优点 简化配置文件 灵活方便 3. 源注解-部分 //修 ...
- java Overloaded的方法是否可以改变返回值的类型?
刚才看到这样一个题,下面的解释很乱,所以还是做一下试验比较好 public class Test { public static void main(String[] args){ Bae b = n ...
- week5 0.1 安装materializecss
用ATOM打开项目 App是什么呢?就是App.js 我们将不需要的删掉 用一下materialize(类似bootstrap的东西) 官网https://materializecss.com/ 想用 ...
- servlet(2)response常用方法
详细的response 学习笔记是: 输出到前台的的方法 1:使用OutputStream流向客户端浏览器输出中文数据 2:使用PrintWriter流向客户端浏览器输出中文数据 3:使用Output ...
- 配置 SQL Server 2008 Email 发送以及 Job 的 Notification通知功能
SQL Server 2008配置邮件的过程就不写了,网上的案例太多了. http://www.cnblogs.com/woodytu/p/5154526.html 这个案例就不错. 主要写下配置完后 ...
- java批量向oracle插入数据
由于项目需要,需要将一个6M的txt中的数据插入到oracle数据表中.txt中的数据是每行一个词.经过统计,词总数是505040.为了看起来方便,我将我的所有方法写在类入口中,数据库的信息我会用te ...
- 阿里云栖大会 所有ppt
https://github.com/Alimei/hangzhouYunQi2017ppt
- XML 可扩展标记语言
因 为XML实在是太重要了,而且被广泛应用!不论是数据存储,还是其他方面,如配置文件等.XML是一种对独立于任何编程语言的数据进行编码的机制.在数据 交换领域,正在变得非常流行!因为他的基于节点的存储 ...
- 配置linux的ip、网络等
之前配过ubuntu的..以为centos的也是这么配置,结果照抄下来,启动报错哈哈...网上搜下资料发现centos配置需要不少文件.忘了以后再参考下- ubuntu的,这样配置 vim /et ...
- php常见排序
public function actionQuickSort(){ $arr = ['5', '4', '3', '2', '1', '0']; $quickRes = $this->quic ...