扩展、委托、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#中使用一个类分两个阶段,首选定义这个类,告诉编译器这个类由什么字段和方 ...
随机推荐
- mysql分表实战
本文主要讲述如何使用存储过程完成本表.并不讨论其他问题.首先我们得看看手册上关于meger引擎的说明: MERGE存储引擎,也被认识为MRG_MyISAM引擎,是一个相同的可以被当作一个来用的MyIS ...
- Android开发最佳实践《IT蓝豹》
Android开发最佳实践 移动开发Android经验分享应用GoogleMaterial Design 摘要:前 段时间,Google公布了Android开发最佳实践的一系列课程,涉及到一些平时 ...
- Redis Cluster 添加/删除 完整折腾步骤
Redis还是挺好玩的,今天测试了集群的添加.删除节点.重分配slot等.更深入的理解redis的游戏规则.步骤繁多,但是详细. 环境解释: 我是在一台Centos 6.9上测试的,各个redis节点 ...
- js基础-运算符
100 * "20" 字符串转数字 5 * "ss" NAN "ss" 转数字返回NAN 任何数字与NAN +-*/ 都返回NAN 5/N ...
- css 响应式布局
移动端最让人闹心的就是在不同的手机要做错响应式布局适应各种手机,开始自己做这方面走了很多的弯路,响应式布局如果是部件,就按实际的大小单位px等设置,像宽可以按照百分比计算,长的可以百分比.auto 或 ...
- kangle请求控制添加的add_header怎么查看
请求控制里添加的add header不会显示在浏览器的请求里,因为是发送给源的,你们要查看可以用phinfo查看.回应控制里添加的会显示在浏览器的回应里
- w3af的使用
编解码工具 配置身份 基本身份认证 明文用base64编码 NTML认证方式,微软特有的加密方式 form表单身份认证 这样基于表单的认证就配置好了 基于cookie认证 点击后面的感叹号,它会有co ...
- Appium1.6启动iOS真机
前提:已经安装了Appium1.6版本,我这里用的是GUI版本 环境要求: 真机iOS9.3及以上 macOS 10.11或10.12 Xcode7及以上 安装步骤如下 第一步:iOS真机 ...
- 第十章 优先级队列 (xa1)左式堆:结构
- CentOS Find命令
find命令用来在指定目录下查找文件.任何位于参数之前的字符串都将被视为欲查找的目录名.如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件.并且将查找到的子目录和文件全部进 ...