扩展、委托、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#中使用一个类分两个阶段,首选定义这个类,告诉编译器这个类由什么字段和方 ...
随机推荐
- Structs复习 ActionMethod
action在执行的是时候 可以不执行excute方法 可以由自己制定 可以在action标签里指定 也可以在方法里动态指定 推荐使用后者 jar包 web.xml <?xml version ...
- hibernateTemplate API
https://docs.spring.io/spring-framework/docs/2.5.x/api/org/springframework/orm/hibernate3/HibernateT ...
- vue 路由meta作用及在路由中添加props作用
vue路由meta:有利于我们处理seo的东西,我们在html中加入meta标签,就是有利于处理seo的东西,搜索引擎 在路由中传参是通过/:id传参代码如下: import Login from ' ...
- 2017面向对象程序设计(Java) 第4周学习指导及要求(2017.9.14-2017.9.18)
学习目标 深入理解程序设计中算法与程序的关系: 深入理解java程序设计中类与对象的关系: 理解OO程序设计的第一个特征:封装: 需要掌握基本使用方法的预定义类有:Math类.String类.Arra ...
- cmd从新获取ip
1.ipconfig/release 2.ipconfig/renew
- datetime空值设置
Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '' for column ...
- Spring的一些资源
1.http://spring.io/ 2.http://projects.spring.io/spring-framework/
- 能判断是电脑端还是手机端的javascript
<script language="javascript"> //平台.设备和操作系统 var system ={ win : false, mac : false, ...
- for 与 for in
在JavaScript中提供了两种方式迭代对象: (1)for 循环: (2)for..in循环: 使用for循环进行迭代数组对象,想必大家都已经司空见惯了.但是,使用for.. in循环时,大家可要 ...
- [Git] 获取指定的历史版本代码
首先 ,把项目 clone 到其他文件夹下 git clone git@github.com:skyming/BMAdScrollView.git 然后查看指定历史版本 tree 的 SHA chec ...